Bei statischen Abfragen wie der in Ihrer Frage müssen Tabellennamen und Spaltennamen statisch sein.
Bei dynamischen Abfragen sollten Sie das vollständige SQL dynamisch generieren und es mit sp_executesql ausführen.
Hier ist ein Beispiel für ein Skript, mit dem Daten zwischen denselben Tabellen verschiedener Datenbanken verglichen werden:
statische Abfrage:
SELECT * FROM [DB_ONE].[dbo].[ACTY]
EXCEPT
SELECT * FROM [DB_TWO].[dbo].[ACTY]
da ich den Namen von leicht ändern möchte table
und schema
diese dynamische Abfrage erstellt habe:
declare @schema varchar(50)
declare @table varchar(50)
declare @query nvarchar(500)
set @schema = 'dbo'
set @table = 'ACTY'
set @query = 'SELECT * FROM [DB_ONE].['+ @schema +'].[' + @table + '] EXCEPT SELECT * FROM [DB_TWO].['+ @schema +'].[' + @table + ']'
EXEC sp_executesql @query
Da dynamische Abfragen viele Details enthalten, die berücksichtigt werden müssen und schwer zu pflegen sind, empfehle ich Ihnen, Folgendes zu lesen: Der Fluch und der Segen von dynamischem SQL
Etwas spät für eine Antwort, sollte aber jemand anderem helfen:
quelle
COUNT(*)
?Sie können keinen Tabellennamen für eine Variable verwenden. Stattdessen müssen Sie Folgendes tun:
quelle
Sie müssen die SQL dynamisch generieren:
quelle
Verwenden Sie
sp_executesql
diese Option, um SQL auszuführen, zquelle
Sie können dies auch verwenden ...
quelle
quelle
Sie müssen das dynamische SQL Server-SQL verwenden
Verwenden Sie EXEC , um SQL auszuführen
Verwenden Sie EXEC sp_executesql , um SQL auszuführen
Verwenden Sie EXECUTE sp_executesql , um SQL auszuführen
quelle
quelle