Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL-Trigger Einfügen aus mehreren Tabellen

Sie verweisen nicht auf die eingefügten oder gelöschten Tabellen, die nur im Trigger verfügbar sind, daher geben Sie natürlich mehr Datensätze zurück, als Sie in Ihrer Abfrage benötigen.

Wenn ich zum ersten Mal einen Trigger schreibe, erstelle ich eine temporäre Tabelle mit dem Namen #inserted (und/oder #deleted) und fülle sie mit mehreren Datensätzen. Es sollte mit dem Design des Tisches übereinstimmen, auf dem der Auslöser sein wird. Es ist wichtig, dass Ihre temporäre Tabelle mehrere Eingabedatensätze enthält, die die verschiedenen Kriterien erfüllen können, die sich auf Ihre Abfrage auswirken (in Ihrem Fall möchten Sie also einige, bei denen die Fallzahl 0 wäre, und andere, bei denen dies beispielsweise nicht der Fall wäre), und das wäre typisch von Daten, die in die Tabelle eingefügt oder init aktualisiert wurden. SQL-Server-Trigger arbeiten mit Datensätzen, sodass auch sichergestellt ist, dass Ihr Trigger das Einfügen oder Aktualisieren mehrerer Datensätze ordnungsgemäß verarbeiten kann. Ein richtig geschriebener Trigger hätte Testfälle, die Sie testen müssen, um sicherzustellen, dass alles richtig abläuft. Ihre #inserted-Tabelle sollte Datensätze enthalten, die alle diese Testfälle erfüllen.

Schreiben Sie dann die Abfrage in eine Transaktion (und setzen Sie sie beim Testen zurück), indem Sie sie mit #inserted verbinden. Wenn Sie eine Einfügung mit einer Auswahl vornehmen, schreiben Sie nur den Auswahlteil, bis Sie das richtig verstanden haben, und fügen Sie dann die Einfügung hinzu. Schreiben Sie zum Testen eine Auswahl aus der Tabelle, in die Sie einfügen, um die eingefügten Daten vor dem Rollback anzuzeigen.

Sobald alles funktioniert, ändern Sie die #inserted-Referenzen in eingefügt, entfernen Sie jeglichen Testcode und natürlich das Rollback (möglicherweise die gesamte Transaktion, je nachdem, was Sie tun.) Fügen Sie den Drop hinzu und erstellen Sie einen Trigger-Teil des Codes. Jetzt können Sie Ihren Trigger als Trigger testen, aber Sie sind in guter Verfassung, da Sie von Ihren früheren Tests wissen, dass er wahrscheinlich funktioniert.