我有一个存储过程,它以与原始表不同的格式选择一些数据:
USE [VolTracker]
GO
DECLARE @return_value int,
@offset int
SET @offset = 5
WHILE @offset >= 1 BEGIN
EXEC @return_value = [dbo].[sp_getStats]
@Doffset = @offset,
@StartTime = --Some Datetime,
@EndTime = --Some later Datetime,
@Contract = NULL
SET @offset = @offset - 1
END
GO
这个具体的例子选择了我想要的所有5个表。但是,我希望所有这些表都加入到一个表中。我该怎么做呢?
答案 0 :(得分:2)
创建临时表或表变量,并在每次执行存储过程时插入到表中。检查this。
//declare your #temptable here
WHILE @offset >= 1 BEGIN
INSERT INTO #tempTable
EXEC @return_value = [dbo].[sp_getStats]
@Doffset = @offset,
@StartTime = --Some Datetime,
@EndTime = --Some later Datetime,
@Contract = NULL
SET @offset = @offset - 1
END
答案 1 :(得分:2)
创建一个与sp_getStats返回的结果集的模式匹配的表变量。然后,在循环中插入此变量:
...
declare @Stage table (YourColumn1 varchar(10), YourColumn2 int, ...);
WHILE @offset >= 1 BEGIN
INSERT INTO @Stage
EXEC @return_value = [dbo].[sp_getStats]
@Doffset = @offset,
@StartTime = --Some Datetime,
@EndTime = --Some later Datetime,
@Contract = NULL
SET @offset = @offset - 1
END
select * from @Stage;
上面的命令将返回返回的所有结果集的并集,但是如果你可以修改程序(或者创建一个新程序)可以返回没有循环的完整集,那么我建议你这样做。