Dela via


OPEN (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Förhandsversion av Microsoft Fabric

Öppnar en Transact-SQL-servermarkör och fyller markören genom att köra Transact-SQL-instruktionen som anges i instruktionen DECLARE CURSOR eller SET cursor_variable .

Transact-SQL syntaxkonventioner

Syntax

OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }  

Arguments

GLOBAL
Anger att cursor_name refererar till en global markör.

cursor_name
Är namnet på en deklarerad markör. Om både en global och en lokal markör finns med cursor_name som namn refererar cursor_name till den globala markören om GLOBAL anges. annars refererar cursor_name till den lokala markören.

cursor_variable_name
Är namnet på en markörvariabel som refererar till en markör.

Remarks

Om markören deklareras med alternativet INSENSITIVE eller STATIC skapar OPEN en tillfällig tabell som innehåller resultatuppsättningen. OPEN misslyckas när storleken på en rad i resultatuppsättningen överskrider den maximala radstorleken för SQL Server-tabeller. Om markören deklareras med alternativet KEYSET skapar OPEN en tillfällig tabell som innehåller nyckeluppsättningen. De temporära tabellerna lagras i tempdb.

När en markör har öppnats använder du funktionen @@CURSOR_ROWS för att ta emot antalet kvalificerande rader i den senast öppnade markören.

Note

SQL Server stöder inte generering av nyckeluppsättningsdrivna eller statiska Transact-SQL markörer asynkront. Transact-SQL marköråtgärder som OPEN eller FETCH batchas, så det finns inget behov av den asynkrona genereringen av Transact-SQL markörer. SQL Server fortsätter att ha stöd för api-servermarkörer (asynkrona keyset-drivna eller statiska program) där öppen svarstid är ett problem, på grund av klientens rundresor för varje marköråtgärd.

Examples

I följande exempel öppnas en markör och alla rader hämtas.

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;  

See Also

CLOSE (Transact-SQL)
@@CURSOR_ROWS (Transact-SQL)
DEALLOCATE (Transact-SQL)
DEKLARERA MARKÖREN (Transact-SQL)
FETCH (Transact-SQL)