2010-12-13 6 views
0
qualifiziert

Mit diesem Befehl können wir so etwas wie angeben:SQL Server MERGE Befehl - wie Trap, wenn nichts

WHEN MATCHED AND stm.StudentMarks > 250 THEN DELETE 

Aber wie tun wir Falle, wenn ein Datensatz nicht tat qualifizieren? Sagen Sie beispielsweise stm.StudentMarks = 100? Ich bekomme einen Syntaxfehler, wenn ich "ELSE" versuche.

Ich weiß, dass dieser Befehl nicht auf diese Weise verwendet wird. Aber wenn es das kann, wird es mir ersparen, eine Transaktion, Sperren und mehrere SQL-Anweisungen zu verwenden.

Antwort

0

Basierend auf weiteres Lernen, ich habe festgestellt, dass die Art und Weise, dies zu tun ist views/TVFs zu verwenden, um den korrekten Datensatz zu erhalten. Man könnte erreichen, dass die Aufzeichnungen "IF ... THEN ..." entsprechen, und ein anderer könnte die Aufzeichnungen erhalten, die der ELSE entsprechen. Es würde nur zwei MERGE-Anweisungen laufen, was keine große Sache ist.

1

Versuche:

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

die Zeilen in der Quelle zu finden, die keine Entsprechung in dem Ziel haben (basierend auf der ON .... Bedingung, die Sie angegeben haben), oder auf andere Weise, müssen Sie mehr/andere Ausdrücke angeben , z.B

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

Danke. Leider wird das nicht funktionieren. Es wird das Prädikat der Übereinstimmungs-Suchbedingung nicht gefunden, aber nicht. Ich habe auch gerade durch Versuch und Irrtum herausgefunden "Eine Aktion vom Typ 'UPDATE' ist in der 'WHEN NOT MATCHED' Klausel einer MERGE-Anweisung nicht erlaubt." MERGE hat eindeutig sehr spezifische Anwendungen, und was ich will, geht über sie hinaus. Transaktionen & Sperren muss es sein. – IamIC

0

Verwenden Sie einen zweiten

WHEN MATCHED THEN 

ohne zusätzliche Bedingungen, wird es nur eine auslösen, wenn Klausel und da der erste bekommt alles, was die zweite mit der Bedingung abgestimmt werden nur diejenigen erhalten, die alle bis auf den Zustand abgestimmt.

+0

Es kann nur 1 von jedem Prädikat-Typ geben. – IamIC