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