如何遍历temp表中的循环以取出SQL中的每个列名
本文关键字:SQL 循环 遍历 temp 何遍历 | 更新日期: 2023-09-27 18:26:04
我在sql中有一个临时表。
CREATE TABLE #Temporary(ColumnNames varchar(100),IsActive varchar(100))
insert into #Temporary(ColumnNames,IsActive)
select aa.Name,bb.IsActive from tableAA aa join tableBB bb on aa.Id = bb.Id
ColumnNames IsActive
Name 1
Description 1
Id 0
现在,我想遍历每个ColumnNames,并将该值传递给另一个select查询如果IsActive=1 ,则使用join从另一个表中取出其相关值
例如,我在c#代码中做了这件事,我需要在SQL代码中转换这段代码
new string s1
forloop(END OF ALL COLUMNS FROM #Temporary){
if(isactive=0)
concatinate string s1 +=cloumnIndex[i]+','
else
concatinate string s1 +='(select resourcetableValue from ResourcesTable as t where contry.'+cloumnIndex[i]+'=t.resourcetableKey),'
}
EXEC('select '+string s1 +' from vwCountry as contry')
我需要创建Strings1,它将从Temp表中取出所有列名,对于循环else部分,它将使用join填充值,并在最后EXEC语句一次执行所有查询
试试这个
DECLARE @i INT=1,
@s1 NVARCHAR(max)=''
WHILE(@i<=@@ROWCOUNT)
BEGIN
SELECT @s1+= CASE WHEN isactive=1 THEN '(select resourcetableValue .......<your condition>'
ELSE ''
from #temporary WHERE id=@i
SET @i=@i+1
END
exec sp_executesql @S1
要按原样编写循环,可以使用:
declare @s nvarchar(4000) = '';
select @s = @s + case IsActive when 0 then ColumnNames + ','
else '(select resourcetableValue from ResourcesTable as t where contry.'
+ ColumnNames + '=t.resourcetableKey),' end
from #Temporary
exec ('select ' + @s + ' from vwCountry as contry')
您可能希望删除select
和exec
之间的最后一个逗号,尽管