TSQL 在执行前生成动态 SQL 语句
TSQL to generate the dynamic SQL statement before execution
如果我有一个列名列表 a,b,c
是否可以生成 SQL
语句作为 string
(在 EXEC
中作为动态 SQL) 基于该列名称中的项目数。
所以,如果我有一个名为 @src
的 table
DECLARE @src AS TABLE
(
list VARCHAR(max)
)
INSERT INTO @src
SELECT 'a'
UNION
SELECT 'b'
UNION
SELECT 'c'
SELECT *
FROM @src
如何动态生成一个字符串for each element in @src
给一个字符串a,b,c
它将在 EXEC
语句中进一步使用,例如 EXEC('select'+a,b,c(coming from dynamic string)+'from mainTbl
使用 javascript 字符串生成器更好地演示这一点
var src = ['a','b','c'];
var target =['e','f','g'];
var beginning ='select';
var end = 'from mainTbl';
var newArray=[];
src.forEach((x,i,r)=>{newArray.push(x+' '+'as '+target[i]);});
var dynamicStr = beginning+' '+newArray.reduce(function(prev,current){return prev+', '+current;})+' '+end; //to be utilized inside SQL EXEC
这在 javascript 中,但 TSQL 是否可以为 @src
的每个元素生成此字符串,以便每当我编辑 @src
最终结果动态变化。
如果我理解正确的话,您似乎只需要聚合“列”即可。
在 SQLServer 2017+ 中你可以使用 string_agg()
SELECT Concat('select ', String_Agg(quotename(list),', '), ' from t')
FROM @src
在 2017 年之前,您可以对 xml 路径 语法
使用更笨重的
select Concat('select ',
Stuff((
select ', ' + QuoteName(list)
from @src
for xml path(''), type).value('text()[1]','nvarchar(max)'), 1, len(', '), ''),
' from t'
) as statement
如果我有一个列名列表 a,b,c
是否可以生成 SQL
语句作为 string
(在 EXEC
中作为动态 SQL) 基于该列名称中的项目数。
所以,如果我有一个名为 @src
DECLARE @src AS TABLE
(
list VARCHAR(max)
)
INSERT INTO @src
SELECT 'a'
UNION
SELECT 'b'
UNION
SELECT 'c'
SELECT *
FROM @src
如何动态生成一个字符串for each element in @src
给一个字符串a,b,c
它将在 EXEC
语句中进一步使用,例如 EXEC('select'+a,b,c(coming from dynamic string)+'from mainTbl
使用 javascript 字符串生成器更好地演示这一点
var src = ['a','b','c'];
var target =['e','f','g'];
var beginning ='select';
var end = 'from mainTbl';
var newArray=[];
src.forEach((x,i,r)=>{newArray.push(x+' '+'as '+target[i]);});
var dynamicStr = beginning+' '+newArray.reduce(function(prev,current){return prev+', '+current;})+' '+end; //to be utilized inside SQL EXEC
这在 javascript 中,但 TSQL 是否可以为 @src
的每个元素生成此字符串,以便每当我编辑 @src
最终结果动态变化。
如果我理解正确的话,您似乎只需要聚合“列”即可。
在 SQLServer 2017+ 中你可以使用 string_agg()
SELECT Concat('select ', String_Agg(quotename(list),', '), ' from t')
FROM @src
在 2017 年之前,您可以对 xml 路径 语法
使用更笨重的select Concat('select ',
Stuff((
select ', ' + QuoteName(list)
from @src
for xml path(''), type).value('text()[1]','nvarchar(max)'), 1, len(', '), ''),
' from t'
) as statement