Dynamischer INSERT/UPDATE in Triggers verwenden

02/04/2010 - 10:11 von M.Erlinger | Report spam
Hallo

ich bin gerade dabei im SQL-Server eine neue Datenbank zu erstellen,
und da ich mit dem SqlServer noch nicht allzuviel Erfahrung habe,
hàtte ich folgende Frage:

In vielen Tabelle habe ich 4 Felder in denen Datum/Uhrzeit und der
Benutzer für das Erstellen des Datensàtzes, und der letzten Änderung
des Datensatzes gepeichert werden soll.
Ich halte den Namen dieser Spalten in allen notwendigen Tabellen
gleich.

Jetzt dachte ich - um nicht in jeder Tabelle bei den Triggern Insert
und Update immer die "fast" gleichen Sql-Commands zu schreiben - an
eine Function oder StoredProcedure, an die ich den Tabellen-Namen
übergeben, und die ID (Prim.Key). In dieser Function oder
StoredProcedure soll dann dynamisch das UPDATE-Command zusammengebaut
werden für die übergebene Tabelle, das mir entweder die CreateRow-
Daten oder die UpdateRow-Daten setzt

Nur weiß ich jetzt nicht, wie ich das UPDATE-Command dynamisch lösen
kann, wenn zum Beispiel ein String für den Tabellen-Namen übergeben
wird, und ich mir auch daraus einen String für den PrimKey-Spalten-
Namen erstelle (die ich von der Namenskonvention auch in allen
Tabellen gleich halte), und diesen Update dann ausführe???

Sollte dies so möglich sein wie ich es mir vorstelle - vielleicht kann
mir hier bitte jemand weiterhelfen ?!??
Danke schon mal und schönen Gruß
Michael
 

Lesen sie die antworten

#1 Stefan Hoffmann
02/04/2010 - 14:43 | Warnen spam
hallo Michael,

On 02.04.2010 10:11, M.Erlinger wrote:
Jetzt dachte ich - um nicht in jeder Tabelle bei den Triggern Insert
und Update immer die "fast" gleichen Sql-Commands zu schreiben - an
eine Function oder StoredProcedure, an die ich den Tabellen-Namen
übergeben, und die ID (Prim.Key). In dieser Function oder
StoredProcedure soll dann dynamisch das UPDATE-Command zusammengebaut
werden für die übergebene Tabelle, das mir entweder die CreateRow-
Daten oder die UpdateRow-Daten setzt


Wo ist der Unterschied, ob du in jedem Trigger eine Prozedure oder dein
UPDATE aufrufst?

EXEC sp_procedure 'tablename';

oder

UPDATE T FROM tablename T
INNER JOIN Inserted I ON T.primaryKey = I.primaryKey
SET changedDate = GETDATE(), changedUser = SUSER_SNAME();

Die Trigger lassen sich ja mit verschieden Tools automatisch erstellen.
Z.B. SMO mit C# und T4 oder VBScript:

http://technet.microsoft.com/de-de/...90%29.aspx
http://technet.microsoft.com/de-de/...90%29.aspx


mfG

Ähnliche fragen