在Query中使用变量表名

时间:2014-07-03 05:42:25

标签: sql-server

每次运行脚本时,每次将每个表名中的一个或两个字母更改为不同的值时,我需要运行相同的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+,具体取决于包含数据的系统。

5 个答案:

答案 0 :(得分:2)

您需要使用Dyanmic SQL。 动态SQL只是您构建查询&#34;动态&#34;在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 + ')
')

答案 1 :(得分:1)

变量表名称需要动态SQL:

declare @table sysname
set @table = 'A'

declare @sql nvarchar(max)
set @sql = 'select * from T_' + @table + 'table1 '  +
    '    WHERE ref in IN (SELECT ref FROM T_' + @table + 'table2) ' +
    '          AND customer IN (SELECT customer FROM T_' + @table + 'table3)'

exec (@sql)

答案 2 :(得分:1)

--Just change a prefix, don't worry about sql query:

-- Where @prefix is a common a whatever is prifix of table
declare @prefix varchar(50); set @prefix='T_A';  
-- Here your query in string format      
declare @sql varchar(max); set @sql='';
set @sql='SELECT * FROM ' + @prefix + 'table1 WHERE ref IN (SELECT ref FROM ' + @prefix + 'table2)' +
+ ' AND customer IN (SELECT customer FROM ' + @prefix + 'table3)';
--execute your query
exec(@sql);

答案 3 :(得分:0)

动态Sql查询:

declare @sqlcommand nvarchar(1000)

set @sqlcommand='<your sql query>'


exec(@sqlcommand)

答案 4 :(得分:0)

试试这个:

DECLARE @SQL VARCHAR(8000)
DECLARE @Part VARCHAR(10) = 'A'

SET @SQL = 'SELECT * FROM T_' + @Part + 'table1 
            WHERE  ref IN (SELECT ref FROM T_' + @Part + 'table2) AND
                   customer IN (SELECT customer FROM T_' + @Part + 'table3)'

EXEC (@SQL)