For statiske forespørgsler, som den i dit spørgsmål, skal tabelnavne og kolonnenavne være statiske.
For dynamiske forespørgsler skal du generere den fulde SQL dynamisk og bruge sp_executesql til at udføre den.
Her er et eksempel på et script, der bruges til at sammenligne data mellem de samme tabeller i forskellige databaser:
Statisk forespørgsel:
SELECT * FROM [DB_ONE].[dbo].[ACTY]
EXCEPT
SELECT * FROM [DB_TWO].[dbo].[ACTY]
Da jeg nemt vil ændre navnet på table
og schema
, Jeg har oprettet denne dynamiske forespørgsel:
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 dynamiske forespørgsler har mange detaljer, der skal overvejes, og de er svære at vedligeholde, anbefaler jeg, at du læser:Forbandelsen og velsignelserne ved dynamisk SQL