IDENT_CURRENT im Trigger verhält sich nicht wie erwartet

20/10/2009 - 11:51 von Bernd | Report spam
Hallo an alle!

Folgendes Problem:
Ich habe die Tabelle "dbo.Search", die über einen INSERT-Trigger in
Tabelle "AP_punkte"
befüllt wird, sobald die Tabelle "AP_punkte" ergànzt wird.
Über IDENT_CURRENT lasse ich in einer dritten Tabelle "Search_Ref" für
jeden Eintrag
die letzte ID aus "dbo.Search" und noch andere Werte eintragen.

Das funktioniert auch prima, solange immer nur Zeile für Zeile in der
"AP_punkte"
ergànzt wird, nicht aber wenn mehrere Zeilen auf einmal (z.B. bei
einem Datenimport
aus einem Flatfile) ergànzt werden. Dann erfolgt leider nur ein
Eintrag in der "Search_Ref",
es sollten aber so viele sein, wie neue Zeilen in der
"AP_punkte" (1:1)

Ich benutze SQL-Server 2008. Wenn jemand ne Idee hat...

Vielen Dank!

PS auch "SCOPE_IDENTITY()" oder @@IDENTITY brachten nix

Hier noch mein Trigger:

ALTER TRIGGER [dbo].[AP_punkte_Insert]
ON [dbo].[AP_punkte]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @letzteID int
SET NOCOUNT ON;
INSERT INTO CSOGIS_Search.dbo.Search (Name,Rechtswert,Hochwert) SELECT
STR (punktnummer,10,0),x_wert,y_wert FROM inserted
SELECT @letzteID = IDENT_CURRENT ('CSOGIS_Search.dbo.Search')

INSERT INTO CSOGIS_Search.dbo.Search_Ref (Search_ID, [DB_Name],
Tb_Name) VALUES (@letzteID, DB_NAME(), 'AP_punkte')

END
 

Lesen sie die antworten

#1 Hannes Brunner
20/10/2009 - 12:33 | Warnen spam
Hallo Bernd,

Bernd schrieb:
Hallo an alle!

Folgendes Problem:
Ich habe die Tabelle "dbo.Search", die über einen INSERT-Trigger in
Tabelle "AP_punkte"
befüllt wird, sobald die Tabelle "AP_punkte" ergànzt wird.
Über IDENT_CURRENT lasse ich in einer dritten Tabelle "Search_Ref" für
jeden Eintrag
die letzte ID aus "dbo.Search" und noch andere Werte eintragen.

Das funktioniert auch prima, solange immer nur Zeile für Zeile in der
"AP_punkte"
ergànzt wird, nicht aber wenn mehrere Zeilen auf einmal (z.B. bei
einem Datenimport
aus einem Flatfile) ergànzt werden. Dann erfolgt leider nur ein
Eintrag in der "Search_Ref",
es sollten aber so viele sein, wie neue Zeilen in der
"AP_punkte" (1:1)



ein Trigger wird beim SQL Server nicht für jede Zeile einzeln
aufgerufen. Daher funktioniert deine Ansatz nicht.

Ich benutze SQL-Server 2008. Wenn jemand ne Idee hat...

Vielen Dank!

PS auch "SCOPE_IDENTITY()" oder @@IDENTITY brachten nix

Hier noch mein Trigger:

ALTER TRIGGER [dbo].[AP_punkte_Insert]
ON [dbo].[AP_punkte]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;



Transactions sind nicht notwendig, der Trigger làuft sowieso innerhalb
einer Transaction ab.

DECLARE @letzteID int
SET NOCOUNT ON;
INSERT INTO CSOGIS_Search.dbo.Search (Name,Rechtswert,Hochwert) SELECT
STR (punktnummer,10,0),x_wert,y_wert FROM inserted
SELECT @letzteID = IDENT_CURRENT ('CSOGIS_Search.dbo.Search')

INSERT INTO CSOGIS_Search.dbo.Search_Ref (Search_ID, [DB_Name],
Tb_Name) VALUES (@letzteID, DB_NAME(), 'AP_punkte')



Kannst du nicht einen INSERT-Trigger auf der Tabelle Search_Ref setzten,
der letzteren INSERT erledigt? Falls nein, müsstest du wohl mit einem
Cursor die inserted-Tabelle durchlaufen.

HTH
Hannes

Ähnliche fragen