2011-08-11 6 views
0

テーブルをループするストアドプロシージャを作成しています。&テンポラリテーブルに値を挿入すると、最終的に一時テーブル&をループします。ループスルーテーブルと値の追加

これまでは、一時テーブルに値を挿入する最初のループを作成しました。

私はこのエラーを取得しています...ここで

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 
+0

を行う必要がありますこれはcursoprで行われることはありませんshoujld仕事です。カーソルを使用して挿入、更新、または削除しないでください。http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them – HLGEM

答えて

1

私は、これは何が起こっているかであることを疑うになります。

  • オープン新しい SSMSのセッション
  • Co py上記のスクリプトの上に
  • これを実行すると動作します。 #tempテーブルが作成されたばかりです。
  • 直ちにもう一度実行するか、スクリプトを少し修正してもう一度実行してください。 #tempテーブルが最初のパスで再発行され、まだ削除されていないため、このエラーメッセージで失敗します。スクリプトの一番下に、スクリプトでこの問題を回避するために

追加:

DROP TABLE #testtable 
+0

Philipの返信をありがとう。私は今このエラーが表示されます:無効なオブジェクト名 '#tempTable'。 – bluetickk

+0

あなたを助けることはできません - "#tempTable"は投稿されたスクリプトのどこにも表示されません。 –

0

を代わりに一時テーブルを移入するためにカーソルを使用するのでは、どのように単に一時テーブルを作成し、移入についてこれは一人でこのように行く?

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

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

はあなたが必要とするすべての合計がある場合、これはそれ

SELECT sum(TestValue) 
    FROM tblTest 
    WHERE TestID > 1