Plusieurs mise à Jour de la Déclaration de FUSION SQL Server
Version de SQL Server : Microsoft SQL Server 2012 - 11.0.2218.0 (x64)
Je suis l'exception suivante quand j'ai couru cette Requête.
Exception : Une action de type "when MATCHED" ne peut pas apparaître plus d'une fois dans une "mise à JOUR" clause d'une instruction MERGE.
Je sais que l'exception a été plus d'une fois mise à Jour de la déclaration de Merge.
veuillez s'il vous plaît me suggérer que comment j'ai réaliser la Requête SQL suivante logique?
Basé sur Une colonne,
Lors de la correspondance et de la colonne n'est pas nulle alors de mettre à jour une seule colonne différente.
Lors de la correspondance et de la colonne est null alors mettre à jour la plupart des colonnes.
When not Matched puis l'Insérer.
Le SQL Complète est
MERGE TargetTable AS targetT
USING SourceTable AS sourceT ON sourceT.Npi = targetT.Npi
WHEN MATCHED AND IsNull(targetT.SPI, '') <> '' THEN
UPDATE SET targetT.Taxonomy = sourceT.Taxonomy --Update Only One Column
WHEN MATCHED AND IsNull(targetT.SPI,'')= '' THEN --Update Rest of the Columns
UPDATE SET targetT.state_license_no = sourceT.state_license_no, targetT.NPI = sourceT.NPI, targetT.PrefixName = sourceT.PrefixName,targetT.last_name = sourceT.last_name,targetT.first_name = sourceT.first_name
,MiddleName = sourceT.MiddleName,targetT.SuffixName = sourceT.SuffixName, targetT.address_1 = sourceT.address_1,targetT.address_2 = sourceT.address_2,targetT.City = sourceT.City,targetT.State = sourceT.State
,zip = sourceT.zip,targetT.phone = sourceT.phone,targetT.Fax = sourceT.Fax,targetT.last_modified_date = sourceT.last_modified_date,targetT.Taxonomy = sourceT.Taxonomy
WHEN NOT MATCHED BY TARGET --Insert New Row
THEN
INSERT (state_license_no, NPI, prefixname, last_name, first_name, MiddleName, SuffixName, address_1, address_2, City, State, zip, phone, Fax, last_modified_date, Taxonomy, Data_source)
VALUES (sourceT.state_license_no, sourceT.NPI, sourceT.PrefixName, sourceT.last_name, sourceT.first_name, sourceT.MiddleName, sourceT.SuffixName,
sourceT.address_1, sourceT.address_2, sourceT.City, sourceT.State, sourceT.zip,
sourceT.phone, sourceT.Fax, sourceT.last_modified_date, sourceT.Taxonomy, sourceT.Data_source);
OriginalL'auteur Sayem | 2014-09-15
Vous devez vous connecter pour publier un commentaire.
Comme par MSDN, "S'il y a deux
WHEN MATCHED
clauses, alors on doit spécifier unUPDATE
action et que l'on doit spécifier unDELETE
action".Indique que toutes les lignes de target_table qui correspondent aux lignes retournées par SUR
<merge_search_condition>
, et satisfait à toute condition de recherche supplémentaire, sont mises à jour ou supprimées en fonction de la clause.Le
MERGE
déclaration peut avoir au plus deuxWHEN MATCHED
clauses.Si deux clauses sont spécifiées, la première clause doit être accompagnée par une
AND <search_condition>
clause. Pour une ligne donnée, la deuxièmeWHEN MATCHED
clause est appliquée uniquement si la première ne l'est pas. Si il y a deuxWHEN MATCHED
clauses, alors on doit spécifier unUPDATE
action et que l'on doit spécifier une action de SUPPRESSION.Source: MSDN
Espère que cette aide.
OriginalL'auteur Sathish
Ne pas considérer cela comme une réponse, je n'ai pas tester le code..Ce que j'ai essayé, c'est ajouter une instruction case pour chaque colonne.
J'ai ajouté de mise à jour pour les deux colonnes. Ce sera long, mais doit idéalement travail.
OriginalL'auteur Jithin Shaji
C'est un gros hack, mais vous pouvez définir une "au lieu de supprimer" la gâchette et de les utiliser pour l'alternative de mise à jour de cas.
Si il y a de tout au LIEU DE mettre à JOUR ou au LIEU DE SUPPRIMER les déclencheurs définis sur target_table, la mise à jour ou supprimer des opérations ne sont pas effectuées. Au lieu de cela, les triggers et les tables inserted et deleted sont remplies en conséquence
je.e que vous pouvez faire "lorsqu'ils sont appariés et..." (mise à jour) d'autre (supprimer). Au lieu de supprimer le déclencheur pourrait faire une mise à jour.
Qui pourraient travailler pour le cas où vous essayez de faire un "delete"
OriginalL'auteur eddiewould