Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL Server Native Client ODBC-drivrutinen använder servermarkörer för att implementera markörfunktionen som definieras i ODBC-specifikationen. En ODBC-applikation styr markörbeteendet genom att använda SQLSetStmtAttr för att sätta olika satsattribut. Detta är attributen och deras standardvärden.
| Attribute | Standardinställning |
|---|---|
| SQL_ATTR_CONCURRENCY | SQL_CONCUR_READ_ONLY |
| SQL_ATTR_CURSOR_TYPE | SQL_CURSOR_FORWARD_ONLY |
| SQL_ATTR_CURSOR_SCROLLABLE | SQL_NONSCROLLABLE |
| SQL_ATTR_CURSOR_SENSITIVITY | SQL_UNSPECIFIED |
| SQL_ATTR_ROW_ARRAY_SIZE | 1 |
När dessa alternativ är inställda till sina standardinställningar vid tidpunkten för att en SQL-sats exekveras använder SQL Server Native Client ODBC-drivrutinen inte en servermarkör för att implementera resultatuppsättningen; istället använder den en standardresultatuppsättning. Om något av dessa alternativ ändras från sina standardinställningar vid tidpunkten för att en SQL-sats körs, försöker SQL Server Native Client ODBC-drivrutinen använda en servermarkör för att implementera resultatuppsättningen.
Standardresultatuppsättningar stöder alla Transact-SQL-satser. Det finns inga begränsningar för vilka typer av SQL-satser som kan köras när man använder en standardresultatuppsättning.
Servermarkörer stöder inte alla Transact-SQL-satser. Servermarkörer stöder inte några SQL-satser som genererar flera resultatuppsättningar.
Följande typer av satser stöds inte av servermarkörer:
Omgångar
SQL-satser byggda av två eller flera individuella SQL SELECT-satser, till exempel:
SELECT * FROM Authors; SELECT * FROM TitlesLagrade procedurer med flera SELECT-satser
SQL-satser som kör en lagrad procedur som innehåller mer än ett SELECT-uttalande. Detta inkluderar SELECT-satser som fyller parametrar eller variabler.
nyckelord
SQL-satser som innehåller nyckelorden FOR BROWSE, eller INTO.
I SQL Server, om en SQL-sats som uppfyller något av dessa villkor körs med en servermarkör, konverteras servermarkören implicit till en standardresultatuppsättning. Efter att SQLExecDirect eller SQLExecute returnerat SQL_SUCCESS_WITH_INFO kommer markörattributen att återställas till sina standardinställningar.
SQL-satser som inte passar in i ovanstående kategorier kan köras med vilka attributinställningar som helst; De fungerar lika bra med antingen en standarduppsättning resultat eller en servermarkör.
Errors
I SQL Server 7.0 och senare genererar ett försök att köra en sats som producerar flera resultatuppsättningar SQL_SUCCESS_WITH INFO och följande meddelande:
SqlState: 01S02"
pfNative: 0
szErrorMsgString: "[Microsoft][SQL Server Native Client][SQL Server]
Cursor type changed."
ODBC-applikationer som tar emot detta meddelande kan anropa SQLGetStmtAttr för att bestämma de aktuella kursorinställningarna.
Ett försök att köra en procedur med flera SELECT-satser när servermarkörer används genererar följande fel:
SqlState: 42000
pfNative: 16937
szErrorMsgString: [Microsoft][SQL Server Native Client][SQL Server]
A server cursor is not allowed on a stored procedure
with more than one SELECT statement in it. Use a
default result set or client cursor.
Ett försök att köra en batch med flera SELECT-satser när servermarkörer används genererar följande fel:
SqlState: 42000
pfNative: 16938
szErrorMsgString: [Microsoft][SQL Server Native Client][SQL Server]
sp_cursoropen. The statement parameter can only
be a single SELECT statement or a single stored
procedure.
ODBC-applikationer som får dessa fel måste återställa alla markörsatsattribut till deras standardinställningar innan de försöker köra satsen.