W przypadku zapytań statycznych, takich jak w pytaniu, nazwy tabel i nazwy kolumn muszą być statyczne.
W przypadku zapytań dynamicznych należy dynamicznie generować pełny kod SQL i wykonywać go przy użyciu sp_executesql.
Oto przykład skryptu używanego do porównywania danych między tymi samymi tabelami w różnych bazach danych:
zapytanie statyczne:
SELECT * FROM [DB_ONE].[dbo].[ACTY]
EXCEPT
SELECT * FROM [DB_TWO].[dbo].[ACTY]
ponieważ chcę łatwo zmienić nazwę table
i schema
utworzyłem to dynamiczne zapytanie:
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
Ponieważ zapytania dynamiczne mają wiele szczegółów, które należy wziąć pod uwagę i są trudne do opanowania, radzę przeczytać: Klątwa i błogosławieństwa dynamicznego SQL
Trochę za późno na odpowiedź, ale powinien pomóc komuś innemu:
źródło
COUNT(*)
?Nie możesz użyć nazwy tabeli dla zmiennej, zamiast tego musisz to zrobić:
źródło
Będziesz musiał dynamicznie generować sql:
źródło
Służy
sp_executesql
do wykonywania dowolnego kodu SQL, npźródło
Możesz również użyć tego ...
źródło
źródło
musisz użyć dynamicznego SQL Servera SQL
Użyj EXEC do wykonania dowolnego kodu SQL
Użyj EXEC sp_executesql, aby wykonać dowolny kod SQL
Użyj EXECUTE sp_executesql, aby wykonać dowolny kod SQL
źródło
źródło