0

我有一个数据库,其中每个表都按标准约定命名。我正在构建一个 SQL 脚本以定期在各种类似命名的表集上运行。

我想声明一个包含表之间表名的公共部分的局部变量,并使用该变量在FROM我的SELECT语句中填写表名的一部分。

我如何将其抽象为在1234替换为局部变量值的表上运行?

Select count(*) From [Database].[dbo].[Table_1234]

这显然不起作用:

Select count(*) From [Database].[dbo].['Table_'+@variable]

有没有办法在选择语句中使用局部变量作为表名或解决这个问题?

4

2 回答 2

2

免责声明:这对我来说看起来像 SQL Server,但这个问题没有被标记为这样。

您可以使用 EXEC 功能:

EXEC('Select count(*) From [Database].[dbo].[Table_' + @variable + ']')

SQL 小提琴:http ://www.sqlfiddle.com/#!3/0ef1d/3

于 2012-08-30T17:52:45.187 回答
0

我不知道如何绕过动态 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 synTable3
于 2012-08-30T18:04:37.133 回答