我有一个数据库,其中每个表都由标准约定命名。我正在构建一个SQL脚本,定期在不同的命名相似的表上运行。
我想声明一个本地变量,该变量包含表之间的表名的公共部分,并使用该变量填充我的SELECT语句的FROM语句中的表名的一部分。
我如何将它抽象为在一个表上运行,在这个表中,局部变量的值被1234替换掉了?
Select count(*) From [Database].[dbo].[Table_1234]这显然不起作用:
Select count(*) From [Database].[dbo].['Table_'+@variable]有没有一种方法可以在select语句中使用局部变量作为表名,或者可以绕过它?
发布于 2012-08-31 01:52:45
免责声明:对我来说,这看起来像SQL Server,但问题并不是这样标记的。
您可以使用EXEC函数:
EXEC('Select count(*) From [Database].[dbo].[Table_' + @variable + ']')SQL Fiddle:http://www.sqlfiddle.com/#!3/0ef1d/3
发布于 2012-08-31 02:04:37
我不知道如何绕过动态SQL。但我建议使用同义词将其最小化(假设您将运行多个/复杂查询,而不是简单的行数):
DECLARE @var NVARCHAR(8)
SET @var = '1234'
EXEC('create synonym synTable1 for Table1_' + @var)
EXEC('create synonym synTable2 for Table2_' + @var)
EXEC('create synonym synTable3 for Table3_' + @var)
SELECT COUNT(*) FROM synTable1
...
DROP SYNONYM synTable1
DROP SYNONYM synTable2
DROP SYNONYM synTable3https://stackoverflow.com/questions/12202606
复制相似问题