sql >> Base de Datos >  >> RDS >> Sqlserver

Un nombre de tabla como una variable

Para consultas estáticas, como la de su pregunta, los nombres de las tablas y las columnas deben ser estáticos.

Para consultas dinámicas, debe generar el SQL completo dinámicamente y usar sp_executesql para ejecutarlo.

Aquí hay un ejemplo de un script usado para comparar datos entre las mismas tablas de diferentes bases de datos:

Consulta estática:

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

Ya que quiero cambiar fácilmente el nombre de table y schema , he creado esta consulta dinámica:

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

Dado que las consultas dinámicas tienen muchos detalles que deben tenerse en cuenta y son difíciles de mantener, le recomiendo que lea:La maldición y las bendiciones del SQL dinámico