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 tabley schemahe 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_executesqlpara 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