有时我需要运行相同的 SQL Server 脚本,每次将每个表名中的一两个字母更改为每次运行脚本时都不同的值。
如何在脚本的开头设置一次,这样我就不需要更改每个表名?
这是脚本的一个简化示例,实际上它包含更多的表:
SELECT * FROM T_Atable1
WHERE ref IN (SELECT ref FROM T_Atable2)
AND customer IN (SELECT customer FROM T_Atable3)
表名的格式为 T_ 其中:
- “
T_
”已修复 -
<id>
是表名的可变部分。在上面的例子中 = "A" -
<table name>
是表的固定名称。在上面的例子中,固定的部分是“table1”,“table2”,“table3”
我怀疑我需要使用动态 SQL,但不知道该怎么做。
SQL Server 可以是 2003+ 的任何版本,具体取决于包含数据的系统。
最佳答案
您需要使用动态 SQL。 动态 SQL 就是您在 SQL 过程或应用程序中的字符串中“动态”构建查询,然后执行该字符串。
例如;
DECLARE @tableVar1 VARCHAR(255) = 'T_Atable1'
DECLARE @tableVar2 VARCHAR(255) = 'T_Atable2'
DECLARE @tableVar3 VARCHAR(255) = 'T_Atable3'
EXEC('
SELECT * FROM ' + @tableVar1 + '
WHERE ref IN (SELECT ref FROM ' + @tableVar2 + ')
AND customer IN (SELECT customer FROM ' + @tableVar3 + ')
')
关于sql-server - Query中使用可变表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24545766/