0

我有一个存储过程,可以从原始表中选择一些不同格式的数据:

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 个表。但是,我希望将所有这些表连接到一张表中。我该怎么做呢?

4

2 回答 2

2

每次执行存储过程时,创建一个临时表或表变量并插入到表中。看看这个

//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
于 2013-05-21T21:41:42.653 回答
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;

以上将返回所有返回的结果集的联合,但是如果您可以修改可以在没有循环的情况下返回完整集的过程(或创建新的过程),那么我建议您这样做。

于 2013-05-21T21:42:28.340 回答