Hallo Forum, ich habe folgendes Problem.
Auf dem SQL Server sind mehrere Datenbanken. Diese Datenbanken können eine Tabelle "Event" in 2 Versionen haben. Einmal mit der Spalte "nurInNeuerVersion", oder eben ohne.
Ich möchte eine Aufstellung haben der Datenbanken der neuen Version und der Daten in "nurInNeuerVersion". Dazu habe ich einen Cursor erstellt
DECLARE db_cursor CURSOR FOR
SELECT name
FROM sys.databases
WHERE state = 0
AND name NOT IN ('master', 'tempdb', 'model', 'msdb');
der mit ein @sql zusammenbaut, welches ich mit EXEC sp_executesql @sql; dann ausführe.
Das ist der SQL der zusammengebaut wird:
IF EXISTS (SELECT 1 FROM [DB1].INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Events' AND COLUMN_NAME = 'nurInNeuerVersion')
BEGIN
INSERT INTO #EventResults (EventId, DatabaseName, nurInNeuerVersion) SELECT EventId, 'DB1' AS DatabaseName, nurInNeuerVersion FROM [DB1].dbo.Events;
END
IF EXISTS (SELECT 1 FROM [DB2].INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Events' AND COLUMN_NAME = 'nurInNeuerVersion')
BEGIN
INSERT INTO #EventResults (EventId, DatabaseName, nurInNeuerVersion) SELECT EventId, 'DB2' AS DatabaseName, nurInNeuerVersion FROM [DB2].dbo.Events;
END
usw.
PROBLEM:
Auch wenn EXISTS Bedingung funktioniert (gibt nur 1 bei neuen DBs zurück), kommt bei der Ausführung für jede alte DB der Fehler "Ungültiger Spaltenname "nurInNeuerVersion"." Nehme ich "nurInNeuerVersion" beim INSERT raus, werden mir auch nur EventID und DatabaseName der neuen Version angezeigt. Kann ich die Syntaxanalyse von Code der nicht ausgeführt wird irgendwie ausschalten? Oder irgendein ganz andererer Vorschlag?
Auf dem SQL Server sind mehrere Datenbanken. Diese Datenbanken können eine Tabelle "Event" in 2 Versionen haben. Einmal mit der Spalte "nurInNeuerVersion", oder eben ohne.
Ich möchte eine Aufstellung haben der Datenbanken der neuen Version und der Daten in "nurInNeuerVersion". Dazu habe ich einen Cursor erstellt
DECLARE db_cursor CURSOR FOR
SELECT name
FROM sys.databases
WHERE state = 0
AND name NOT IN ('master', 'tempdb', 'model', 'msdb');
der mit ein @sql zusammenbaut, welches ich mit EXEC sp_executesql @sql; dann ausführe.
Das ist der SQL der zusammengebaut wird:
IF EXISTS (SELECT 1 FROM [DB1].INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Events' AND COLUMN_NAME = 'nurInNeuerVersion')
BEGIN
INSERT INTO #EventResults (EventId, DatabaseName, nurInNeuerVersion) SELECT EventId, 'DB1' AS DatabaseName, nurInNeuerVersion FROM [DB1].dbo.Events;
END
IF EXISTS (SELECT 1 FROM [DB2].INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Events' AND COLUMN_NAME = 'nurInNeuerVersion')
BEGIN
INSERT INTO #EventResults (EventId, DatabaseName, nurInNeuerVersion) SELECT EventId, 'DB2' AS DatabaseName, nurInNeuerVersion FROM [DB2].dbo.Events;
END
usw.
PROBLEM:
Auch wenn EXISTS Bedingung funktioniert (gibt nur 1 bei neuen DBs zurück), kommt bei der Ausführung für jede alte DB der Fehler "Ungültiger Spaltenname "nurInNeuerVersion"." Nehme ich "nurInNeuerVersion" beim INSERT raus, werden mir auch nur EventID und DatabaseName der neuen Version angezeigt. Kann ich die Syntaxanalyse von Code der nicht ausgeführt wird irgendwie ausschalten? Oder irgendein ganz andererer Vorschlag?