2010-12-13 2 views
0

Avec cette commande, nous pouvons spécifier quelque chose comme:commande merge SQL Server - comment intercepter si rien qualifié

WHEN MATCHED AND stm.StudentMarks > 250 THEN DELETE 

Mais comment faire si un enregistrement piège n'a pas admissible? Par exemple, dites stm.StudentMarks = 100? Je reçois une erreur de syntaxe si j'essaye "ELSE". Je sais que cette commande n'est généralement pas utilisée de cette façon. Mais s'il peut le faire, cela me évitera d'avoir à utiliser une transaction, des verrous et plusieurs instructions SQL.

Répondre

0

Sur la base de l'apprentissage ultérieur, je conclus que la façon de le faire est d'utiliser des vues/TVFs pour obtenir l'ensemble de données correctes. On pourrait obtenir que les dossiers se conforment à "SI ... ALORS ..." et un autre pourrait faire en sorte que les documents soient conformes à l'ELSE. Il aurait juste couru deux déclarations MERGE, ce qui n'est pas grave.

1

Essayez:

WHEN NOT MATCHED ....... THEN ...... 

pour trouver ces lignes dans la source qui n'a pas d'équivalent dans la cible (en fonction de la condition ON .... que vous avez spécifié), ou autre, vous devez spécifier plus/d'autres expressions , par exemple

WHEN MATCHED AND stm.StudentMarks <= 250 THEN ..... 
+0

Merci. Malheureusement, cela ne fonctionnera pas. Il ne va pas intercepter le prédicat de condition de recherche de correspondance, mais pas de clause. Je viens également de découvrir par essais et erreurs "Une action de type" UPDATE "n'est pas autorisée dans la clause" WHEN NOT MATCHED "d'une déclaration MERGE." Manifestement, MERGE a des utilisations très spécifiques, et ce que je veux va au-delà. Transactions et verrous il devra être. – IamIC

0

Utilisez un deuxième

WHEN MATCHED THEN 

sans conditions supplémentaires, il ne déclenche une clause WHEN et depuis le premier obtient tout ce qui correspond à la condition de la seconde ne fera que ceux qui correspondent à tous, mais la condition.

+0

Il ne peut y avoir qu'un seul type de prédicat. – IamIC

Questions connexes