Para consultas estáticas, como la de su pregunta, los nombres de tabla y columna 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 utilizado 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]
Como 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 considerarse y son difíciles de mantener, le recomiendo que lea: La maldición y las bendiciones del SQL dinámico
Un poco tarde para una respuesta, pero debería ayudar a alguien más:
fuente
COUNT(*)
?No puede usar un nombre de tabla para una variable, en su lugar, debería hacer esto:
fuente
Tendrá que generar el sql dinámicamente:
fuente
Se usa
sp_executesql
para ejecutar cualquier SQL, por ejemplofuente
Además, puedes usar esto ...
fuente
fuente
necesita usar el SQL dinámico de SQL Server
Use EXEC para ejecutar cualquier SQL
Use EXEC sp_executesql para ejecutar cualquier SQL
Use EXECUTE sp_executesql para ejecutar cualquier SQL
fuente
fuente