2016-05-09 14 views
0

Ich schreibe eine gespeicherte Prozedur, die einen benutzerdefinierten Tabellentyp verwenden muss, um mehrere Zeilen zu löschen, ohne die gespeicherte Prozedur mehrmals ausführen zu müssen. Meine Frage ist, dass es möglich ist, einen benutzerdefinierten Tabellentyp (anstelle von 17; einer für jede Tabelle) zu schreiben und eine Spalte hinzuzufügen, die die Tabelle angibt, auf die sie sich bezieht. Zum Beispiel hier ist meine Delete-Anweisung:Benutzerdefinierte Tabellentypen

DELETE FROM Table1 
WHERE A_ID IN (SELECT ID FROM UserDefinedTableType WHERE TblClm = 'Table1' 

Kann ich den gleichen benutzerdefinierten Tabellentyp für die obige Anweisung verwenden und die folgende Anweisung

DELETE FROM Table2 
WHERE A_ID IN (SELECT ID FROM UserDefinedTableType WHERE TblClm = 'Table2' 

Ich frage mich, ob dies funktionieren wird oder nicht. Ich bin neu in diesem Konzept und ich konnte auf diese Weise keine gute Dokumentation zur Verwendung benutzerdefinierter Tabellentypen finden.

Danke für jede Hilfe.

+1

Ich sehe nichts falsch mit diesem Ansatz, aber es ist nicht etwas, was ich zuvor gesehen habe. Ich würde anstelle von IN eine Verknüpfung in Ihrer delete-Anweisung verwenden, aber ehrlich gesagt wird es am Ende dasselbe sein. –

+0

Okay danke. Ich könnte einen Join verwenden, aber ich bevorzuge nur IN, sodass ich explizit definieren kann, welche IDs gelöscht werden. Danke für den Vorschlag. –

+0

Sie würden bei ID beitreten. :) –

Antwort

0

Dies ist ein wenig lang für einen Kommentar und die Formatierung würde ermordet werden. Hier ist, was ich mit einem Join anstelle von in.

DELETE t1 
FROM Table1 t1 
JOIN UserDefinedTableType udt ON t1.A_ID = udt.ID 
WHERE udt.TblClm = 'Table1' 
+0

Ich weiß, was Sie mit einem Join gemeint haben Ich benutze sie die ganze Zeit, ich bevorzuge nur IN, weil es ein bisschen sauberer für mich ist. –