合并SQL Server 2016中的数据

时间:2017-11-07 10:24:22

标签: sql sql-server tsql merge cursor

我有一个关于SQL Server的非常通用的问题。

我有一个SP,它输入@reportID参数并返回该报告的历史记录。由于我有大约3000个报告并需要处理每个报告的历史记录,因此我创建了一个临时表,其中插入了返回的数据,但没有报告ID是无用的。

OPEN cursor_reportStats
FETCH NEXT FROM cursor_reportStats INTO @ReportID

WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO @temp
EXEC dbo.GetHistory @ReportID

FETCH NEXT FROM cursor_reportStats INTO @ReportID
END

所以我需要的是将@ReportID附加到GetHistory返回的每一行

非常感谢

1 个答案:

答案 0 :(得分:1)

添加第二个@temptable,其中包含ReportID列+其余数据。您的@temp表将是缓冲表,并将在每次迭代时删除。在每次迭代结束时,您将在第二个@ReportID中插入当前@temptable值和缓冲区表中的数据。

所以,你会有这样的事情:

OPEN cursor_reportStats
FETCH NEXT FROM cursor_reportStats INTO @ReportID

WHILE @@FETCH_STATUS = 0
BEGIN

DELETE FROM @temp;

INSERT INTO @temp
EXEC dbo.GetHistory @ReportID


INSERT INTO @temptable
SELECT @ReportID, *
FROM @temp

FETCH NEXT FROM cursor_reportStats INTO @ReportID
END