在SQL Server存储过程中迭代查询结果

时间:2018-10-23 17:54:14

标签: sql sql-server stored-procedures

我有一个存储过程,需要在其中查询包含另一个查询的表,然后再执行该查询,获取结果并将这些结果存储在另一个表中。我将不知道此查询返回的列是多少,但是我必须能够将未知列映射到结果表中的列。我确实知道查询可以包含1到20列的任何地方,这些列需要映射到我的结果表中,从RSLT_1到RSLT_20。

例如,假设查询返回5列。我需要遍历结果并将column1映射到RSLT_1,将column2映射到RSLT_2,等等。然后将这些结果存储在我的结果表中

我已经用C#编写了这个逻辑,这很简单,因为我可以遍历各列以确定存在多少列。我不知道如何在存储过程中做到这一点。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我无法为您提供完整的答案,因为我不知道您的查询/表格。这是我正在考虑的主要内容。您必须完成您的需求。但是请记住,光标很慢,通常不建议在生产中使用。

select * into #tmp from <sourceQuery>

declare @columnName varchar(100)
declare @sql NVARCHAR(MAX)
declare c cursor for
select name from tempdb.sys.columns where object_id = object_id('tempdb..#tmp')

open c

fetch next from c into @columnName

while @@FETCH_STATUS = 0
begin
    select @columnName

    set @sql = N'insert into <targetTable> (valueColumn) select ' + @columnName + 'from #tmp'
    exec @sql

    fetch next from c into @columnName
end
close c
deallocate c

drop table #tmp
相关问题