Loop Through Table&添加值

时间:2011-08-11 14:07:22

标签: tsql

我正在编写一个存储过程来循环遍历表,将值插入临时表&然后最终我将循环通过临时表&添加值。

到目前为止,我已经编写了第一个循环,它将值插入临时表。

我收到此错误...

There is already an object named '#testtable' in the database.

这是我的代码:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER OFF
GO

DECLARE @TestID int,
        @TestValue int,
        @sum int

CREATE TABLE #testtable (TestID int,
                    TestValue int)

DECLARE loop CURSOR FOR
SELECT TestValue
FROM tblTest
WHERE TestID > 1


OPEN loop
FETCH NEXT FROM loop INTO @TestID,@TestValue

WHILE @@FETCH_STATUS = 0
BEGIN

    INSERT INTO #temp (TestID, TestValue) values (@TestID, @TestValue)

    FETCH NEXT FROM loop INTO @TestID,@TestValue
END

CLOSE loop
DEALLOCATE loop

    SELECT @TestID FROM #testtable WHERE @TestID > 1

3 个答案:

答案 0 :(得分:1)

我怀疑这是发生的事情:

  • 在SSMS中打开会话
  • 复制上述脚本
  • 运行它,它的工作原理。这是因为#temp表刚刚创建。
  • 立即再次运行,或者稍微修改脚本并再次运行它。这次它失败并显示该错误消息,因为#temp表在第一次传递中被重新调用并且尚未被删除。

要在脚本中避免此问题,请在脚本底部添加:

DROP TABLE #testtable

答案 1 :(得分:0)

而不是使用游标来填充临时表,如何只创建临时表并将其填充到一起去?

if OBJECT_ID('tempdb..#testtable') is not null drop table #testtable

SELECT TESTID, TestValue 
INTO #testtable
FROM tblTest WHERE TestID > 1 

答案 2 :(得分:0)

如果你需要的只是总和那么这应该是

    SELECT sum(TestValue)
    FROM tblTest
    WHERE TestID > 1