将存储过程插入到临时表中,临时表返回空

时间:2019-08-15 00:33:34

标签: sql-server loops insert temp

出于无法控制的原因,我必须一次查询某些过程一个设施ID,这意味着我需要遍历所有设施并注入到临时表中才能有效利用数据。

我已经多次使用此循环,并且从未遇到过问题。由于某种原因,临时查询表返回了空值,我无法弄清原因。

存储过程可以完美地独立执行,并且整个查询在运行时不会引发任何错误。但是,当我选择* #HistoricalRentalActivity时,我得到一个空白表(但标题正确)

IF OBJECT_ID('tempdb..#HistoricalRentalActivity') IS NOT NULL 
     DROP TABLE #HistoricalRentalActivity

IF OBJECT_ID('tempdb..#rowsiteHistoricalRentalActivity') IS NOT NULL 
     DROP TABLE #rowsiteHistoricalRentalActivity

SELECT 
    ROW_NUMBER() OVER (ORDER BY siteid) AS rownum, siteid 
INTO #rowsiteHistoricalRentalActivity 
FROM dbo.sites

CREATE TABLE #HistoricalRentalActivity
(
        SiteID INT,
        iSortOrder INT,
        sDescActivity VARCHAR (200),
        dcM1 MONEY,
        dcM2 MONEY,
        dcM3 MONEY,
        dcM4 MONEY,
        dcM5 MONEY,
        dcM6 MONEY,
        dcM7 MONEY,
        dcM8 MONEY,
        dcM9 MONEY,
        dcM10 MONEY,
        dcM11 MONEY,
        dcM12 MONEY,
        dcM13 MONEY,
        dcM14 MONEY,
        dc3MonthAvg MONEY
)


DECLARE @enddate datetime
SET @enddate = DATEADD(ss, -1, DATEADD(month, DATEDIFF(month, 0, getdate()), 0))

DECLARE @maxrow INT
SET @maxrow = (SELECT COUNT(siteid) FROM #HistoricalRentalActivity)

DECLARE @row INT
SET @row = 1

WHILE(@row <= @maxrow)
BEGIN
    DECLARE @siteidrow INT
    SET @siteidrow = (SELECT siteid FROM #rowsiteHistoricalRentalActivity WHERE rownum = @row)

    INSERT INTO #HistoricalRentalActivity (SiteID, iSortOrder, sDescActivity,
        dcM1, dcM2, dcM3, dcM4, dcM5, dcM6, dcM7, 
        dcM8, dcM9, dcM10, dcM11, dcM12, dcM13, dcM14, 
        dc3MonthAvg)
       EXEC dbo.spRptMgmtHistorytb
                @SiteID = @siteidrow,
                @dEnd = @enddate

    SET @row = @row + 1
END

我很茫然,希望别人有个主意吗?

1 个答案:

答案 0 :(得分:0)

maxRow需要从#rowSiteHistoricalRentalActivity获取计数,而不是刚刚创建的表。