如果我有一個列名串列,是否可以根據該列名中的專案數a,b,c生成一個SQL陳述句string(作為動態 SQL 在內部執行)。EXEC
所以,如果我有一張桌子叫@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最終結果時動態更改。
uj5u.com熱心網友回復:
如果我理解正確,看起來您只需要聚合您的“列”。
在 SQLServer 2017 中,您可以使用string_agg()
SELECT Concat('select ', String_Agg(quotename(list),', '), ' from t')
FROM @src
在 2017 年之前,您可以將 clunkier用于 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/431790.html
標籤:javascript sql sql服务器 tsql
