Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Un nome di tabella come variabile

Per le query statiche, come quella nella tua domanda, i nomi delle tabelle e delle colonne devono essere statici.

Per le query dinamiche, dovresti generare l'SQL completo in modo dinamico e utilizzare sp_executesql per eseguirlo.

Ecco un esempio di uno script utilizzato per confrontare i dati tra le stesse tabelle di database diversi:

Interrogazione statica:

SELECT * FROM [DB_ONE].[dbo].[ACTY]
EXCEPT
SELECT * FROM [DB_TWO].[dbo].[ACTY]

Dal momento che voglio cambiare facilmente il nome di table e schema , ho creato questa query dinamica:

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

Poiché le query dinamiche hanno molti dettagli che devono essere considerati e sono difficili da mantenere, ti consiglio di leggere:La maledizione e le benedizioni dell'SQL dinamico