2017-06-15 2 views
1

トランザクションテーブル定義:カーソルFETCHが失敗しました。 @@ FETCH_STATUSは-1

create table Transactions ([ID] [int] NOT NULL, [Value] [int] NOT NULL) 

はのは、一部のレコードを挿入してみましょう。

INSERT INTO Transactions Values(1,100) 
INSERT INTO Transactions Values(2,10) 

これは私がカーソル

create table #Tmp_Transactions ([ID] [int] NOT NULL, [Value] [int] NOT NULL) 
INSERT INTO #Tmp_Transactions SELECT * FROM Transactions WHERE Value>100 
DECLARE @rowcount int 
SET @rowcount = @@rowcount 
PRINT @rowcount 
DECLARE @ID int 
DECLARE txcursor CURSOR FOR SELECT ID FROM #Tmp_Transactions 
OPEN txcursor 
FETCH NEXT FROM txcursor INTO @ID 
PRINT @@FETCH_STATUS ---//prints -1 

CLOSE txcursor 
DEALLOCATE txcursor 
drop table #Tmp_Transactions 

を使用しています方法です-----は、カーソルを開いた後

(0 row(s) affected) 
0 
-1 
+0

**また、「SELECT * INTO」を「INSERT INTO #Tmp_Transactions SELECT * FROM Transactions」に置き換える必要があります。 –

+0

効果はありません。それでも-1を返します – user1

+0

#Tmp_Transactionsにはいくつの行がありますか?行はありますか? [Microsoftのドキュメント](https://docs.microsoft.com/en-us/sql/t-sql/functions/fetch-status-transact-sql#return-value)によると、ステータス「-1」は、 FETCH文が失敗したか、または行が結果セットを超えていました。 " –

答えて

1

を印刷し、あなたは

の下FETCH..likeを使用する必要があります
OPEN db_cursor 
FETCH NEXT FROM db_cursor INTO @name 

あなたはそれをやっていないので、Fetch_status wiできるでしょう-1問題の変化ごとに更新

によるこのWHERE Value>100に設定いかなる結果がありませんので、あなたは> = 100を使用-1.Whenあなたが取得している、結果セットがありますフェッチステータスは表示されません-1

+0

それは問題ではありません。私は質問でFETCHステートメントを逃した。私はあなたが示唆したようにFETCH NEXTを置いた後でもまだ問題があります。私は質問を編集しました。 – user1

+0

@ user1:更新を参照 – TheGameiswar

関連する問題