2017-06-15 3 views
1

Transaktionen Tabellendefinition:Cursor FETCH ist fehlgeschlagen. @@ FETCH_STATUS -1

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

Lassen Sie uns einige Datensätze einfügen.

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

Dies ist, wie ich Cursor

----- druckt
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 

bin mit

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

Sie ** auch ** müssen ersetzen "SELECT * INTO" mit "INSERT INTO #Tmp_Transactions SELECT * FROM Transaktionen usw." –

+0

Kein Effekt. Es gibt immer noch -1 – user1

+0

Wie viele Zeilen haben Sie in #Tmp_Transactions? Hast du irgendwelche Reihen? Laut der Dokumentation von Microsoft (https://docs.microsoft.com/en-us/sql/t-sql/functions/fetch-status-transact-sql#return-value) bedeutet der Status "-1" "" Die FETCH-Anweisung ist fehlgeschlagen, oder die Zeile befand sich außerhalb der Ergebnismenge. "' –

Antwort

1

nach Cursor öffnen, haben Sie FETCH..like unter

verwenden
OPEN db_cursor 
FETCH NEXT FROM db_cursor INTO @name 

da Sie das nicht tun, Fetch_status wi ll -1

aktualisierte gemäß Änderungen in Frage:

Es gibt kein Ergebnis aufgrund dieser WHERE Value>100 gesetzt ist, so sind Sie immer -1.When Sie verwenden> = 100, gibt es eine Ergebnismenge und Sie werden nicht Abrufstatus -1

+0

Das ist nicht das Problem. Ich habe die FETCH-Erklärung in meiner Frage vermisst. Ich habe immer noch das Problem, auch nachdem Sie FETCH NEXT gestellt haben, wie Sie es vorgeschlagen haben. Ich habe die Frage bearbeitet. – user1

+0

@ user1: siehe aktualisiert – TheGameiswar

Verwandte Themen