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

Schreibe einen Kommentar