Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[Sql Server 2000] inserted / deleted mit Text bei AFTER Trigger

Empfohlene Antworten

Veröffentlicht

Hi folks,

Tabelle:

a int,

b int,

c int,

d text

Ich brauche das:

select * into #ins from inserted

in dieser Form:

select *(ohne Text / nText / image - Felder ) into #ins from inserted.

Ich habe versucht einen String wie folgt zusammenzubauen: (INFORMATIONSCHEMES)

select @sql = 'select a,b,c into #ins from inserted'

exec(@sql)

Nach dem Ausführen kommt die Fehlermeldung das inserted nicht bekannt ist.

Wie kann ich das umgehen / lösen ?

Thx.

verstehe nicht ganz den sinn aber egal,

im Query Analyzer direkt das ausführen


select a,b,c into #ins from inserted

kriegst du dann aber im #ins drei int Spalten.

Willst du im #ins was anderes als int haben muss du die Tabelle erst mal

erstellen und dann bei select die int casten

Wo zu brauchst du denn eine temporäre Tabelle ??

Also das Problem an der Sache ist folgendes:

Ich brauche einen AFTER - Trigger, der an einer Tabelle durchgeführte Änderungen feldweise speichert (pro geänderter Column einen Datensatz).

Um auf die alten / neuen Werte zuzugreifen verwende ich die Tabellen inserted und deleted. Aus den gesammelten Informationen setze ich mir einen Insert - String zusammen, den ich mit exec(@sql) ausführen will. Wenn ich in diesem String inserted / deleted verwende, versteht der Sql Server das aber nicht und gibt "Ungültiger Objektname: inserted" zurück.

Wenn ich aber ein Feld vom Typ Text, nText oder Image habe, funktioniert

"select * into #ins from inserted" nicht mehr und ich muss es irgendwie schaffen das Text - Feld anhand der INFORMATIONSCHEMES von der Überwachung auszuschließen, da ich die Felder nicht manuell eingeben möchte, sondern anhand des Tabellennamen ermittle.

Das ganze funktioniert wunderbar, bis ein Feld vom Typ Text in der Tabelle auftaucht. Das darf bei AFTER - Triggern nicht über inserted / deleted gelesen werden.

ALTERNATIV: Wie kann ich das Statement, das ein INSTEAD OF - Trigger abfängt ausführen, nachdem ich es evtl. geprüft oder modifiziert habe ? Kann ich das Statement irgendwoher bekommen ?

Ich weiß, Fragen über Fragen ! :)

Also das Problem an der Sache ist folgendes:

Ich brauche einen AFTER - Trigger, der an einer Tabelle durchgeführte Änderungen feldweise speichert (pro geänderter Column einen Datensatz).

Um auf die alten / neuen Werte zuzugreifen verwende ich die Tabellen inserted und deleted. Aus den gesammelten Informationen setze ich mir einen Insert - String zusammen, den ich mit exec(@sql) ausführen will. Wenn ich in diesem String inserted / deleted verwende, versteht der Sql Server das aber nicht und gibt "Ungültiger Objektname: inserted" zurück.

Is ganz normal und kann dir auch oefter mal mit temporaeren Tabellen passieren. Das Problem dabei ist wohl, dass dynamisches SQL in einer neuen Session ausgefuehrt wird und du somit ausserhalb des Gueltigkeitsbereiches deiner inserted Tabelle bist.

Wenn ich aber ein Feld vom Typ Text, nText oder Image habe, funktioniert

"select * into #ins from inserted" nicht mehr und ich muss es irgendwie schaffen das Text - Feld anhand der INFORMATIONSCHEMES von der Überwachung auszuschließen, da ich die Felder nicht manuell eingeben möchte, sondern anhand des Tabellennamen ermittle.

Das ganze funktioniert wunderbar, bis ein Feld vom Typ Text in der Tabelle auftaucht. Das darf bei AFTER - Triggern nicht über inserted / deleted gelesen werden.

In der Regel "selectet" man dann halt nur die Schluessel in eine temporaere Tabelle und joint diese dann mit der Original-Tabelle. So kommt man auch an die Textfelder ran.

(Ich hoffe ich hab einigermassen verstanden, was du machen willst :) )

Goos

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.