Benutzer mit den meisten Antworten
COLUMNS_UPDATED in einer Funktion auslagern

Frage
-
Hallo, ich nutze COLUMNS_UPDATED() erfolgreich in einem Trigger. Nun muss diese Routine in eine Funktion im SQL- Server ausgelagert werden, damit auch andere Trigger diese Routine nutzen können. Ich habe im Prinzip im Trigger eine Temp-Tabelle gemacht. Diese wird dann von der ausgelagerten Funktion gefüllt. Die Routine selbst hab ich einfach mit Copy-Paste kopiert und ausgelagert. Ich übergebe lediglich den Tabellennamen. Es kommen keine Error´s hoch oder sonst was, COLUMNS_UPDATED erkennt einfach keine Veränderungen mehr, wenn ich sie in eine Function auslagere. Kann das sein, dass COLUMNS_UPDATED gar net in einer SQL-Funktion funktionieren kann, sondern in einem Trigger? Wenn ich Debuge, dann wird die Tabelle und korrekte Anzahl von Spalten erkannt, sprich kann das kein Parameter-Fehler sein. Hat da jemand nen Tipp? Danke im Voraus
Antworten
-
Sie heisst developer sql_2008 R2
Was hat es auf sich mit CDC oder OUTPUT- Clause?
Hallo,die Developer Edition ist nur zum Testen & Entwickeln gedacht; ausschlaggebend ist die produktiv genutzte Edition (und das darf nicht die Developer Edition sein).
CDC = Change Data Capture (http://msdn.microsoft.com/de-de/library/bb522489.aspx), eine Build-In Funktion in der Enterprise Edition, um Datenänderungen protokollieren zu können.
Bei DML Aktionen wie INSERT/UPDATE/DELETE kann man sich über die OUTPUT Klause (http://msdn.microsoft.com/de-de/library/ms177564.aspx) die betroffenen Datensätze zurück geben lassen.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort markiert BLRBeginner Montag, 12. Dezember 2011 21:31
-
Der Gedanke ist, dass ich einige Tabellen auf ne Veränderung prüfen muss.
Da gibt es nur zwei Ansätze:
1. Du speicherst deine Tabelle zwischen und vergleichst diese mit der aktuellen.
2. Du benutze ein Auditing-Verfahren.
Da du COLUMN_UPDATED() erwähnst, das fällt in die zweite Kategorie. Nämlich Audit-Trigger. Hier gibt es nichts, was sinnvoll ausgelagert werden kann. Allerdings kannst du diese Trigger per Code-Generierung automatisch erzeugen:
http://www.codeproject.com/KB/database/AuditTrailGenerator.aspx
- Als Antwort markiert BLRBeginner Montag, 12. Dezember 2011 21:32
Alle Antworten
-
<p>Was genau willst Du denn erreichen?</p></blockquote><br/>Danke für deine schnelle Antwort.
Der Gedanke ist, dass ich einige Tabellen auf ne Veränderung prüfen muss. Dies hab ich bisher in einer Tabelle mittels COLUMNS_UPDATED umgesetzt, was auch super funktioniert.
Nun dachte ich mir einfach, ich lagere diesen Abschnitt in einer Funktion aus und nutze diese Funktion bei den anderen Triggern auch.
Jetzt muss ich scheinbar in jedem Trigger den selben Code hinschreiben -
Sie heisst developer sql_2008 R2
Was hat es auf sich mit CDC oder OUTPUT- Clause?
Hallo,die Developer Edition ist nur zum Testen & Entwickeln gedacht; ausschlaggebend ist die produktiv genutzte Edition (und das darf nicht die Developer Edition sein).
CDC = Change Data Capture (http://msdn.microsoft.com/de-de/library/bb522489.aspx), eine Build-In Funktion in der Enterprise Edition, um Datenänderungen protokollieren zu können.
Bei DML Aktionen wie INSERT/UPDATE/DELETE kann man sich über die OUTPUT Klause (http://msdn.microsoft.com/de-de/library/ms177564.aspx) die betroffenen Datensätze zurück geben lassen.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort markiert BLRBeginner Montag, 12. Dezember 2011 21:31
-
Nein, wie Olaf schon ausführte, nur in SQL2008R2 Enterprise.
Auch die Output-Klausel gibt's erst ab 2008 R2 (? bin ich jetzt nicht ganz sicher, ob das auch schon für 2008 verfügbar war). Wenn Du mit Versionen darunter arbeitest, dann mußt Du einen Trigger verwenden.
-
Um es etwas zu präzisieren:
Die OUTPUT Klausel gibt es seit SQL Server 2005 und steht in allen Editionen (exl Compact) zur Verfügung.
CDC gibt es ab SQL Server 2008 und steht nur in der Enterprise Edition zur Verfügung.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing -
Der Gedanke ist, dass ich einige Tabellen auf ne Veränderung prüfen muss.
Da gibt es nur zwei Ansätze:
1. Du speicherst deine Tabelle zwischen und vergleichst diese mit der aktuellen.
2. Du benutze ein Auditing-Verfahren.
Da du COLUMN_UPDATED() erwähnst, das fällt in die zweite Kategorie. Nämlich Audit-Trigger. Hier gibt es nichts, was sinnvoll ausgelagert werden kann. Allerdings kannst du diese Trigger per Code-Generierung automatisch erzeugen:
http://www.codeproject.com/KB/database/AuditTrailGenerator.aspx
- Als Antwort markiert BLRBeginner Montag, 12. Dezember 2011 21:32