如何遍历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语句一次执行所有查询

如何遍历temp表中的循环以取出SQL中的每个列名

试试这个

 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')

您可能希望删除selectexec之间的最后一个逗号,尽管