T-SQL: Cursor-iteration nicht zu stoppen von @@FETCH_STATUS=-1

Habe ich einen einfachen cursor in einer gespeicherten Prozedur. Der cursor einfach durchläuft alle Zeilen einer Tabelle.

Aus meiner Ausgabe scheint es, dass der iterator holt n+1 Zeilen.

Habe ich versucht, ein break die while-Schleife die iteration, aber das löst nicht das Problem.
Wie kommt das?

ALTER PROC spInsertNewCategory --spInsertNewCategory '-1','-1'
@categoryName NVARCHAR(80),
@categoryInfo NVARCHAR(80)
AS 
BEGIN

    DECLARE @siteLanguage_id      INT
    DECLARE @lang_id              INT
    DECLARE @default_siteLanguage INT

    DECLARE cr_siteLanguage       CURSOR
    FOR 
    SELECT sl.siteLanguage_id, sl.lang_id, sl.default_siteLanguage 
    FROM siteLanguage sl


    OPEN cr_siteLanguage
        FETCH NEXT FROM cr_siteLanguage
        INTO @siteLanguage_id,@lang_id,@default_siteLanguage
        PRINT '@siteLanguage_id: '+ CAST(@siteLanguage_id AS NVARCHAR(3))+' fetch: '+ CAST(@@FETCH_STATUS AS NVARCHAR(5))

        WHILE (@@FETCH_STATUS = 0)
            BEGIN
            IF (@@FETCH_STATUS=-1)
                BEGIN
                PRINT 'in if -1'
                BREAK
                END
            FETCH NEXT FROM cr_siteLanguage
            INTO @siteLanguage_id,@lang_id,@default_siteLanguage
            PRINT '@siteLanguage_id: '+ CAST(@siteLanguage_id AS NVARCHAR(3))+' fetch: '+ CAST(@@FETCH_STATUS AS NVARCHAR(5))
            END
    CLOSE cr_siteLanguage
    DEALLOCATE cr_siteLanguage 

    SELECT * FROM siteLanguage
END

T-SQL: Cursor-iteration nicht zu stoppen von @@FETCH_STATUS=-1
T-SQL: Cursor-iteration nicht zu stoppen von @@FETCH_STATUS=-1

  • Warum einmal die Mühe mit einem cursor für diese? Scheint ziemlich einfach - nur mit einem richtigen set-basierte Ansatz und mit ihm getan werden. Es wird viel schneller laufen, und Sie nicht zu verwirren haben, um mit @@FETCH_STATUS und so ein Zeug ....
  • Das ist einfach nur testen Sie den cursor fucntionality, ich bin nicht eine cursor-fan, aber ich habe einen Fall, in dem der cursor ist meine beste option (ja, ich bin umarmt die Dunkle Seite). Speziell für die code-Wartung. Der performance-Aspekt ist irrelevant, da die cursor-code zum Durchlaufen ca 100 Zeilen einmal im Monat. Ich bin mit diesem code für die site-Konfiguration/Wartung. Und ja, wie Sie sagten, set-basierten Ansatz ist die Art, wie Dinge getan werden sollte, in sql.
InformationsquelleAutor Luther | 2014-09-27
Schreibe einen Kommentar