Nous avons un système CRM utilisant SQL Server et cherchons à remplir tous les clients avec une adresse e-mail, même si cette adresse email est NULL.Insertion dépendante avec sélection de plusieurs lignes
Il existe une table Client, une table pour les adresses e-mail et une table Linker.
je peux effectuer une requête SELECT
pour tous les clients qui ont besoin d'une nouvelle ligne Email:
SELECT @CompanyId = Comp_CompanyId
FROM Company
WHERE Company.Comp_CompanyId NOT IN (
SELECT ELink_RecordID
FROM EmailLink
)
et je peux effectuer les INSERT
déclarations pour ajouter une adresse e-mail à un client:
DECLARE @EmailId int
DECLARE @ELinkId int
EXEC @ELinkId = eware_get_identity_id 'Email'
EXEC @EmailId = eware_get_identity_id 'Email'
INSERT INTO Email (
Emai_EmailId,
Emai_CreatedBy,
Emai_CreatedDate,
Emai_UpdatedBy,
Emai_UpdatedDate,
Emai_TimeStamp,
Emai_EmailAddress
)
VALUES (
@EmailId,
1,
GETDATE(),
1,
GETDATE(),
GETDATE(),
NULL
)
INSERT INTO EmailLink(
ELink_LinkID,
ELink_CreatedBy,
ELink_CreatedDate,
ELink_UpdatedBy,
ELink_UpdatedDate,
ELink_TimeStamp,
ELink_EntityID,
ELink_RecordID,
ELink_Type,
ELink_EmailId
)
VALUES(
@ELinkId,
1,
GETDATE(),
1,
GETDATE(),
GETDATE(),
5, -- Person is 13, Company is 5
COMPANY_ID_GOES_HERE,
'Business',
@EmailId
)
Existe-t-il un moyen de les combiner en une seule instruction SQL sans devoir utiliser un outil externe? Je peux écrire un programme Python rapide pour ce faire, mais les personnes qui maintiennent ce long terme sont axées sur SQL.
Le plus loin que j'ai est la combinaison SELECT
avec le INSERT
pour l'e-mail, mais ne pouvait pas comprendre comment puis INSERT
la ligne de liaison:
DECLARE @CompanyId int
DECLARE @EmailId int
DECLARE @ELinkId int
EXEC @ELinkId = eware_get_identity_id 'Email'
EXEC @EmailId = eware_get_identity_id 'Email'
INSERT INTO Email (
Emai_EmailId,
Emai_CreatedBy,
Emai_CreatedDate,
Emai_UpdatedBy,
Emai_UpdatedDate,
Emai_TimeStamp,
Emai_EmailAddress
)
VALUES (
@EmailId,
1,
GETDATE(),
1,
GETDATE(),
GETDATE(),
NULL
)
SELECT @CompanyId = Comp_CompanyId
FROM Company
WHERE Company.Comp_CompanyId NOT IN (
SELECT ELink_RecordID
FROM EmailLink
)
Malheureusement non. Je reçois "syntaxe incorrecte près de 'cteX'." revenu. A également dû ajouter les lignes DECLARE et EXEC. Cela n'a qu'un seul INSERT sur les deux et ne récupère pas les ID requis des procédures stockées EXEC. – Metalshark
J'ai mis à jour la réponse, la syntaxe incorrecte nouvelle cteX était due à l'absence de demi-côlon –
J'ai encore du travail à faire pour que cela fonctionne, mais ce travail supplémentaire n'a pas été couvert par cette question. Votre solution fonctionne pour ce qui a été demandé. par exemple. devez 'EXEC' la procédure stockée pour chaque itération. – Metalshark