verwenden Sie Variablen in sql-trigger-Erstellung
Ich versuche, einen trigger erstellen, die dynamisch und ersetzen müssen, die Teil der create-Anweisung, insbesondere den Datenbank-Namen, eine Verknüpfung gemacht auf.
CREATE TRIGGER [dbo].[tr_UseType_update] ON [dbo].[UseType] FOR UPDATE AS
BEGIN
SET NOCOUNT ON
INSERT [dbo].[UseType]
SELECT 'Updated', i.*
FROM inserted
INNER JOIN [(SELECT DB_NAME())].[dbo].[UseType] i ON inserted.[UseTypeID] = i.[UseTypeID]
END
Ich hab das versucht aber offensichtlich, es wird der text gar nicht wirklich bewerten SELECT DB_NAME(), gibt es einen Weg, es zu bekommen, um das zu beurteilen Wert.
Ich bin mit sql 2005/8. Wir haben ein deployment-tool, das verwendet sqlcmd so ein fallback wird die änderung das tool in Variablen, die übergeben werden kann, um sqlcmd aber wenn ich reduzieren die Menge an Arbeit, und tun es in dem Skript selbst (die erzeugt wird), die nützlich sein würde.
- Sie nicht brauchen, DB_NAME (), denn dies würde die Auflösung die gleiche Datenbank mit der Tabelle UseType, die dieses auslösen. Und Sie schreiben die gleiche Tabelle, die den trigger auf. Was ist das problem, das Sie eigentlich lösen wollen?
- Warum der name der Datenbank überhaupt? Sollte nicht
dbo.UseType
geben Sie in der rechten Tabelle? - der Auslöser ist in einer anderen Datenbank auf die Datenbank im join
- aktualisiert meine Antwort auf diesen Kommentar
- das kann man aber nur erstellen Sie einen trigger in der aktuellen Datenbank, die Sie verwenden - in dem Fall
DB_NAME()
löst auf derselben Datenbank - Immer noch kein Sinn: Auf die Aktualisierung der lokalen UseType Tisch, Lesen die Zeilen von UseType in einer anderen Datenbank, die mit dem update-und INSERT in die lokale Tabelle? Ist UseTypeID eine IDENTITÄT? Wie können Sie sicher sein, Sie werden übereinstimmen, cross-Datenbank?
- dies ist ein audit-trigger, bei einer änderung der Daten in einer Datenbank, im Grunde kopieren Sie diese Zeile in ein audit-Reihe in eine andere Datenbank mit der gleichen Struktur
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die einzige Möglichkeit wäre die Verwendung von dynamischen sql.
Gibt es keine andere Möglichkeit zur Parametrisierung der Datenbank Namen oder Tabellennamen.
Dass gesagt wird, die dynamisch erstellen Sie einen trigger, wie dies scheint, wie eine gefährliche Idee.
Der einfachste Weg, das zu tun, was Sie wollen, werden Sie so etwas wie:
Es ist zwingend erforderlich, dies zu Lesen, bevor Sie eine dynamische sql-code, aber!
sp_msforeachdb
Könnten Sie möglicherweise zum ausführen von dynamischer sql-und laden Sie diese in eine temp-Tabelle, die wiederum zur Verfügung stehen würde, um den trigger.