Heim  >  Artikel  >  php教程  >  SQL Server-Cursor-Verarbeitungsschleife

SQL Server-Cursor-Verarbeitungsschleife

高洛峰
高洛峰Original
2016-12-14 11:49:211114Durchsuche

Testen Sie 3 Datenelemente

CREATE TABLE test_main (
id      INT,
value   VARCHAR(10),
PRIMARY KEY(id)
);

INSERT INTO test_main(id, value) VALUES (1, 'ONE');

INSERT INTO test_main(id, value ) VALUES (2, 'TWO');

INSERT INTO test_main(id, value) VALUES (3, 'THREE');

Einfache Schleifenverarbeitung

DECLARE

@id INT, @value VARCHAR(10);

BEGIN

– Definieren Sie den Cursor.

DECLARE c_test_main CURSOR FAST_FORWARD FOR

SELECT id, value FROM test_main;

– Öffne den Cursor.

OPEN c_test_main;

– Fülle die Daten aus.

FETCH NEXT FROM c_test_main INTO @ id, @value;

– Wenn die Daten abgerufen werden, werden sie verarbeitet.

WHILE @@fetch_status = 0

BEGIN

PRINT @value;

– Geben Sie die nächsten Daten ein.

FETCH NEXT FROM c_test_main INTO @id, @value;

END;

- Schließen Sie den Cursor

CLOSE c_test_main;

-- Lassen Sie den Cursor los.

DEALLOCATE c_test_main;

END;

go

EINS

ZWEI

DREI

Cursor für Aktualisierung

DECLARE

@id INT, @value VARCHAR (10);

BEGIN

--Definieren Sie den Cursor.

DECLARE c_test_main CURSOR FOR

SELECT id, value FROM test_main

FOR UPDATE;

--Cursor öffnen.

OPEN c_test_main;

--Daten füllen.

FETCH NEXT FROM c_test_main INTO @id, @value ;

--Wenn die Daten abgerufen werden, werden sie verarbeitet.

WHILE @@fetch_status = 0

BEGIN

PRINT @value;

--Daten aktualisieren.

UPDATE

test_main

SET

Wert = Wert + '1'

WHERE

CURRENT OF c_test_main;

--Füllen Sie die nächsten Daten aus.

FETCH NEXT FROM c_test_main INTO @id, @value;

END;

– Schließen Sie den Cursor.

CLOSE c_test_main;

– Lassen Sie den Cursor los.

DEALLOCATE c_test_main;

END;

go

EINS

(1 Zeile betroffen)

ZWEI

Drei

SELECT * FROM test_main;

go

id          value

----------- ---------

                                                                                                                                   🎜> 3 Drei1


(3 Zeilen betroffen)


Unterstützter Cursor, der zurückscrollt und so weiter


Hinweis: Zu Testzwecken werden die Daten in der Tabelle test_main auf 11 Elemente erhöht.

DECLARE

@id INT, @value VARCHAR(10);

BEGIN

​​​​-- Definieren Sie den Cursor.

DECLARE c_test_main CURSOR SCROLL FOR
SELECT id, value FROM test_main ;

– Öffne den Cursor.
OPEN c_test_main;

– Fülle die Daten aus.

FETCH FIRST FROM c_test_main INTO @id, @value;
PRINT 'Im Cursor Die erste Zeile:' + @value;

-- Füllen Sie die Daten aus.
FETCH LAST FROM c_test_main INTO @id, @value;
PRINT 'Die letzte Zeile im Cursor:' + @value ;

– Daten ausfüllen.
FETCH ABSOLUTE 3 FROM c_test_main INTO @id, @value;
PRINT 'Zeile 3 im Cursor [absolute Adresse] :' + @value;

-- Daten ausfüllen.
FETCH RELATIVE -2 FROM c_test_main INTO @id, @value;
PRINT 'Zeile -2 im Cursor [relative Adresse]: ' + @value;

– Füllen Sie die Daten aus.
FETCH PRIOR FROM c_test_main INTO @id, @value;
PRINT 'Vorherige Zeile im Cursor:' + @value;

-- Daten ausfüllen.
FETCH NEXT FROM c_test_main INTO @id, @value;
PRINT 'Nächste Zeile im Cursor:' + @value;

-- Cursor schließen
CLOSE c_test_main;
– Lassen Sie den Cursor los.

DEALLOCATE c_test_main;

END;
go



Zusammenfassung


SQL-92-Syntax

DECLARE Cursorname [ INSENSITIVE ] [ SCROLL ] CURSOR

FÜR select_statement

[ FOR { NUR LESEN | UPDATE [ OF columns_name [ ,...n ] ] } ]


Transact-SQL扩展语法

DECLARE Cursor_Name CURSOR

[ LOKAL | GLOBAL ]

[ FORWARD_ONLY | SCROLLEN ]

[ STATISCH | SCHLÜSSELSATZ | DYNAMISCH | FAST_FORWARD ]

[ READ_ONLY | SCROLL_LOCKS | OPTIMISTISCH ]

[ TYPE_WARNING ]

FOR select_statement

[ FOR UPDATE [ OF columns_name [ ,...n ] ] ] ]


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn