我有一个存储过程,需要在其中查询包含另一个查询的表,然后再执行该查询,获取结果并将这些结果存储在另一个表中。我将不知道此查询返回的列是多少,但是我必须能够将未知列映射到结果表中的列。我确实知道查询可以包含1到20列的任何地方,这些列需要映射到我的结果表中,从RSLT_1到RSLT_20。
例如,假设查询返回5列。我需要遍历结果并将column1映射到RSLT_1,将column2映射到RSLT_2,等等。然后将这些结果存储在我的结果表中
我已经用C#编写了这个逻辑,这很简单,因为我可以遍历各列以确定存在多少列。我不知道如何在存储过程中做到这一点。有什么想法吗?
答案 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