Hallo,
ich möchte ein CURSOR mit dynamischem SQL Statement in einem Trigger(After Update) laufen lassen.
Leider habe ich das Gefühl, dass innerhalt des CURSORS nicht mehr auf INSERTED zugegriffen werden kann.
Aus diesem Grund habe ich eine Tabellenvariable angelegt und wollte innerhalb des CURSORS auf diese Variable zugreifen
aber leider funktioniert das auch nicht.
Hier mein Statement:
IF UPDATE(ID_Status)
BEGIN
DECLARE @Data TABLE
(
ID_ADDRESS INT,
ID_ADDRESS_ORG INT,
ID_STATUS INT,
Statusdate DATETIME,
Lastuser VARCHAR(50),
Lastdate DATETIME,
Vorname VARCHAR(50),
Nachname VARCHAR(50),
Kundennummer VARCHAR(50),
Vertrag_Nr VARCHAR(50),
id_tarif INT,
Dialer INT,
DBName_ORG VARCHAR(100),
TransferDate_ORG_DB DATETIME
)
INSERT INTO @Data (ID_ADDRESS,
ID_ADDRESS_ORG,
ID_STATUS,
Statusdate,
Lastuser,
Lastdate,
Vorname,
Nachname,
Kundennummer,
Vertrag_Nr,
id_tarif,
Dialer,
DBName_ORG,
TransferDate_ORG_DB)
SELECT
ID_ADDRESS,
ID_ADDRESS_ORG,
ID_STATUS,
Statusdate,
Lastuser,
Lastdate,
Vorname,
Nachname,
Kundennummer,
Vertrag_Nr,
id_tarif,
Dialer,
DBName_ORG,
TransferDate_ORG_DB
FROM
Inserted
DECLARE @DBName VARCHAR(100)
DECLARE @sSelect VARCHAR(MAX)
DECLARE DataCursor CURSOR FOR
SELECT DISTINCT
DBName_ORG
FROM
@Data
OPEN DataCursor
FETCH NEXT FROM DataCursor INTO @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
IF ISNULL(DATABASEPROPERTYEX(@DBName, 'Status'),'offline') = 'online'
BEGIN
SET @sSelect = 'Insert Into ' + @DBName + '.dbo.T_Address (ID_Address_2C, ID_Address_Parent, ID_Status, Statusdate, Lastuser, Lastdate, Vorname, Nachname, Kundennummer, Vertrag_Nr, id_tarif, Zupo)
Select
I.ID_Address,
I.ID_Address_ORG,
I.ID_Status,
I.Statusdate,
I.Lastuser,
I.Lastdate,
I.Vorname,
I.Nachname,
I.Kundennummer,
I.Vertrag_Nr,
I.id_tarif,
1
from
@Data as I
where
I.id_status = 3
and I.DBName_ORG = ''' + @DBName + '''
and I.TransferDate_ORG_DB is null
'
EXECUTE (@sSelect)
END
FETCH NEXT FROM DataCursor INTO @DBName
END
CLOSE DataCursor
DEALLOCATE DataCursor
END
Der Fehler lautet:
Die @Data-Tabellenvariable muss deklariert werden
Habt ihr vielleicht eine Idee?
Vielen Dank für eure Hilfe.
Sebator
ich möchte ein CURSOR mit dynamischem SQL Statement in einem Trigger(After Update) laufen lassen.
Leider habe ich das Gefühl, dass innerhalt des CURSORS nicht mehr auf INSERTED zugegriffen werden kann.
Aus diesem Grund habe ich eine Tabellenvariable angelegt und wollte innerhalb des CURSORS auf diese Variable zugreifen
aber leider funktioniert das auch nicht.
Hier mein Statement:
IF UPDATE(ID_Status)
BEGIN
DECLARE @Data TABLE
(
ID_ADDRESS INT,
ID_ADDRESS_ORG INT,
ID_STATUS INT,
Statusdate DATETIME,
Lastuser VARCHAR(50),
Lastdate DATETIME,
Vorname VARCHAR(50),
Nachname VARCHAR(50),
Kundennummer VARCHAR(50),
Vertrag_Nr VARCHAR(50),
id_tarif INT,
Dialer INT,
DBName_ORG VARCHAR(100),
TransferDate_ORG_DB DATETIME
)
INSERT INTO @Data (ID_ADDRESS,
ID_ADDRESS_ORG,
ID_STATUS,
Statusdate,
Lastuser,
Lastdate,
Vorname,
Nachname,
Kundennummer,
Vertrag_Nr,
id_tarif,
Dialer,
DBName_ORG,
TransferDate_ORG_DB)
SELECT
ID_ADDRESS,
ID_ADDRESS_ORG,
ID_STATUS,
Statusdate,
Lastuser,
Lastdate,
Vorname,
Nachname,
Kundennummer,
Vertrag_Nr,
id_tarif,
Dialer,
DBName_ORG,
TransferDate_ORG_DB
FROM
Inserted
DECLARE @DBName VARCHAR(100)
DECLARE @sSelect VARCHAR(MAX)
DECLARE DataCursor CURSOR FOR
SELECT DISTINCT
DBName_ORG
FROM
@Data
OPEN DataCursor
FETCH NEXT FROM DataCursor INTO @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
IF ISNULL(DATABASEPROPERTYEX(@DBName, 'Status'),'offline') = 'online'
BEGIN
SET @sSelect = 'Insert Into ' + @DBName + '.dbo.T_Address (ID_Address_2C, ID_Address_Parent, ID_Status, Statusdate, Lastuser, Lastdate, Vorname, Nachname, Kundennummer, Vertrag_Nr, id_tarif, Zupo)
Select
I.ID_Address,
I.ID_Address_ORG,
I.ID_Status,
I.Statusdate,
I.Lastuser,
I.Lastdate,
I.Vorname,
I.Nachname,
I.Kundennummer,
I.Vertrag_Nr,
I.id_tarif,
1
from
@Data as I
where
I.id_status = 3
and I.DBName_ORG = ''' + @DBName + '''
and I.TransferDate_ORG_DB is null
'
EXECUTE (@sSelect)
END
FETCH NEXT FROM DataCursor INTO @DBName
END
CLOSE DataCursor
DEALLOCATE DataCursor
END
Der Fehler lautet:
Die @Data-Tabellenvariable muss deklariert werden
Habt ihr vielleicht eine Idee?
Vielen Dank für eure Hilfe.
Sebator