Sdílet prostřednictvím


OTEVŘÍT (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Otevře kurzor serveru Transact-SQL a naplní kurzor spuštěním příkazu Transact-SQL zadaného v příkazu DECLARE CURSOR nebo SET cursor_variable .

Transact-SQL konvence syntaxe

Syntax

OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }  

Arguments

GLOBAL
Určuje, že cursor_name odkazuje na globální kurzor.

cursor_name
Je název deklarovaného kurzoru. Pokud jako název existuje globální i místní kurzor s cursor_name , cursor_name odkazuje na globální kurzor, pokud je zadána funkce GLOBAL; jinak cursor_name odkazuje na místní kurzor.

cursor_variable_name
Je název proměnné kurzoru, která odkazuje na kurzor.

Remarks

Pokud je kurzor deklarován pomocí možnosti INSENSITIVE nebo STATIC, OPEN vytvoří dočasnou tabulku pro uložení sady výsledků. Open selže, když velikost libovolného řádku v sadě výsledků překročí maximální velikost řádku pro tabulky SQL Serveru. Pokud je kurzor deklarován pomocí možnosti KEYSET, open vytvoří dočasnou tabulku pro uložení sady klíčů. Dočasné tabulky jsou uloženy v databázi tempdb.

Po otevření kurzoru pomocí funkce @@CURSOR_ROWS získejte počet opravňujících řádků v posledním otevřeném kurzoru.

Note

SQL Server nepodporuje asynchronní generování sad klíčů řízených nebo statických Transact-SQL kurzory. Transact-SQL operace kurzoru, jako je OPEN nebo FETCH, jsou dávkové, takže asynchronní generování kurzorů Transact-SQL není potřeba. SQL Server nadále podporuje asynchronní kurzory založené na sadách klíčů nebo serverových kurzorech statického aplikačního programovacího rozhraní (API), u kterých se jedná o problém s nízkou latencí OPEN, a to z důvodu odezvy klienta pro každou operaci kurzoru.

Examples

Následující příklad otevře kurzor a načte všechny řádky.

DECLARE Employee_Cursor CURSOR FOR  
SELECT LastName, FirstName  
FROM AdventureWorks2022.HumanResources.vEmployee  
WHERE LastName like 'B%';  
  
OPEN Employee_Cursor;  
  
FETCH NEXT FROM Employee_Cursor;  
WHILE @@FETCH_STATUS = 0  
BEGIN  
    FETCH NEXT FROM Employee_Cursor  
END;  
  
CLOSE Employee_Cursor;  
DEALLOCATE Employee_Cursor;  

Viz také

ZAVŘÍT (Transact-SQL)
@@CURSOR_ROWS (Transact-SQL)
DEALLOCATE (Transact-SQL)
DEKLAROVAT KURZOR (Transact-SQL)
APORTUJ (Transact-SQL)