sp_cursoropen (Transact-SQL)
gäller för:SQL Server
Öppnar en markör.
sp_cursoropen
definierar SQL-instruktionen som är associerad med markören och markörens alternativ och fyller sedan i markören.
sp_cursoropen
motsvarar kombinationen av Transact-SQL-uttrycken DECLARE_CURSOR
och OPEN
. Den här proceduren anropas genom att ange ID = 2
i ett TDS-paket (Tabular Data Stream).
Transact-SQL syntaxkonventioner
Syntax
sp_cursoropen cursor OUTPUT
, stmt
[ , scrollopt [ OUTPUT ]
[ , ccopt [ OUTPUT ]
[ , rowcount OUTPUT [ , boundparam ] [ , ...n ] ] ] ]
[ ; ]
Argument
Viktig
Argument för utökade lagrade procedurer måste anges i den specifika ordning som beskrivs i avsnittet Syntax. Om parametrarna anges i fel ordning visas ett felmeddelande.
markören
En SQL Server-genererad marköridentifierare.
markören är ett handle
värde som måste anges för alla efterföljande procedurer som involverar markören, till exempel sp_cursorfetch
.
-markören parametern är int och kan inte NULL
.
markören gör att flera markörer kan vara aktiva på en enda databasanslutning.
stmt
En obligatorisk parameter som definierar markörens resultatuppsättning. Alla giltiga frågesträngar (syntax och bindningar) av valfri strängtyp (oavsett Unicode, storlek osv.) kan fungera som en giltig stmt värdetyp.
scrollopt
Rullningsalternativ. Parametern scrollopt är int, med standardvärdet NULL
och kan vara ett av följande värden.
Värde | Beskrivning |
---|---|
0x0001 |
KEYSET |
0x0002 |
DYNAMIC |
0x0004 |
FORWARD_ONLY |
0x0008 |
STATIC |
0x10 |
FAST_FORWARD |
0x1000 |
PARAMETERIZED_STMT |
0x2000 |
AUTO_FETCH |
0x4000 |
AUTO_CLOSE |
0x8000 |
CHECK_ACCEPTED_TYPES |
0x10000 |
KEYSET_ACCEPTABLE |
0x20000 |
DYNAMIC_ACCEPTABLE |
0x40000 |
FORWARD_ONLY_ACCEPTABLE |
0x80000 |
STATIC_ACCEPTABLE |
0x100000 |
FAST_FORWARD_ACCEPTABLE |
På grund av möjligheten att det begärda värdet inte är lämpligt för markören som definieras av stmtfungerar den här parametern både som indata och utdata. I sådana fall tilldelar SQL Server ett lämpligt värde.
ccopt
Alternativ för samtidighetskontroll. ccopt är en valfri parameter som kräver något av följande int indatavärden.
Värde | Beskrivning |
---|---|
0x0001 |
READ_ONLY |
0x0002 |
SCROLL_LOCKS (tidigare känt som LOCKCC ) |
0x0004 |
OPTIMISTIC (tidigare känt som OPTCC ) |
0x0008 |
OPTIMISTIC (tidigare känt som OPTCCVAL ) |
0x2000 |
ALLOW_DIRECT |
0x4000 |
UPDT_IN_PLACE |
0x8000 |
CHECK_ACCEPTED_OPTS |
0x10000 |
READ_ONLY_ACCEPTABLE |
0x20000 |
SCROLL_LOCKS_ACCEPTABLE |
0x40000 |
OPTIMISTIC_ACCEPTABLE |
0x80000 |
OPTIMISITC_ACCEPTABLE |
Precis som med scrolloptkan SQL Server åsidosätta de begärda ccopt- värden.
rowcount
Antalet hämtningsbuffertar som ska användas med AUTO_FETCH
. Standardvärdet är 20 rader.
rowcount fungerar annorlunda när det tilldelas som ett indatavärde jämfört med ett returvärde.
Som indatavärde | Som returvärde |
---|---|
När värdet AUTO_FETCH scrollopt anges representerar radantal antalet rader som ska placeras i hämtningsbufferten.Obs! > 0 är ett giltigt värde när AUTO_FETCH anges, men ignoreras annars. |
Representerar antalet rader i resultatuppsättningen, förutom när värdet scrolloptAUTO_FETCH anges. |
boundparam
Betecknar användningen av extra parametrar.
boundparam är en valfri parameter som ska anges om värdet scrolloptPARAMETERIZED_STMT
anges till ON
.
Returnera kodvärden
Om inget fel utlöses returnerar sp_cursoropen
något av följande värden.
Värde | Beskrivning |
---|---|
0 |
Proceduren har körts. |
0x0001 |
Ett fel uppstod under körningen (ett mindre fel, inte tillräckligt allvarligt för att skapa ett fel i åtgärden). |
0x0002 |
En asynkron åtgärd pågår. |
0x0002 |
En FETCH åtgärd pågår. |
A |
Markören frigjordes och är inte tillgänglig. |
När ett fel utlöses kan returvärdena vara inkonsekventa och noggrannheten kan inte garanteras.
När parametern rowcount anges som ett returvärde inträffar följande resultatuppsättning.
Värde | Beskrivning |
---|---|
-1 |
Returneras om antalet rader är okänt eller inte tillämpligt. |
-n |
Returneras när en asynkron population är i kraft. Representerar antalet rader som placerades i hämtningsbufferten när scrollopt-AUTO_FETCH värde har angetts. |
Om RPC används är returvärdena följande.
Värde | Beskrivning |
---|---|
0 |
Proceduren lyckas. |
1 |
Proceduren misslyckades. |
2 |
En tangentuppsättningsmarkör genereras asynkront. |
16 |
En snabbsnabb markören stängdes automatiskt. |
Om sp_cursoropen
proceduren körs korrekt skickas RPC-returparametrarna och en resultatuppsättning med information om TDS-kolumnformat (0xa0
och 0xa1
meddelanden). Om det misslyckas skickas ett eller flera TDS-felmeddelanden. I båda fallen returneras inga raddata och antalet DONE
meddelanden är 0
.
0x81
returneras (standard för SELECT
-instruktioner) tillsammans med 0xa5
- och 0xa4
tokenströmmarna.
Anmärkningar
Parametern stmt
Om stmt anger körningen av en lagrad procedur kan indataparametrarna antingen definieras som konstanter som en del av stmt sträng eller anges som boundparam argument. Deklarerade variabler kan skickas som bundna parametrar på det här sättet.
Det tillåtna innehållet i parametern stmt beror på om ccoptALLOW_DIRECT
returnerade värde länkades av OR
till resten av ccopt värden:
Om
ALLOW_DIRECT
inte anges måste antingen en Transact-SQLSELECT
- ellerEXECUTE
-instruktion som anropar en lagrad procedur som innehåller en endaSELECT
-instruktion användas. Dessutom måsteSELECT
-instruktionen kvalificeras som en markör. Det kan alltså inte innehålla nyckelordenSELECT INTO
ellerFOR BROWSE
.Om
ALLOW_DIRECT
anges kan detta resultera i en eller flera Transact-SQL-instruktioner, inklusive instruktioner som kör andra lagrade procedurer med flera instruktioner. Icke-SELECT
-instruktioner eller någonSELECT
-instruktion som innehåller nyckelordenSELECT INTO
ellerFOR BROWSE
körs och resulterar inte i att en markör skapas. Detsamma gäller för allaSELECT
-instruktioner som ingår i en batch med flera instruktioner. I fall där enSELECT
-instruktion innehåller satser som endast gäller markörer ignoreras dessa satser. När till exempel värdet för ccopt är0x2002
är detta en begäran för:En markör med rullningslås, om det bara finns en enda
SELECT
-instruktion som kvalificerar sig som en markör, ellerEn direkt instruktionskörning om det finns flera instruktioner, en enda icke-
SELECT
-instruktion eller enSELECT
-instruktion som inte kvalificerar sig som en markör.
Parametern scrollopt
De första fem scrollopt-värdena (KEYSEY
, DYNAMIC
, FORWARD_ONLY
, STATIC
och FAST_FORWARD
) är ömsesidigt uteslutande.
PARAMETERIZED_STMT
och CHECK_ACCEPTED_TYPES
kan länkas av OR
till något av de fem första värdena.
AUTO_FETCH
och AUTO_CLOSE
kan länkas av OR
till FAST_FORWARD
.
Om CHECK_ACCEPTED_TYPES
är ON
måste minst ett av de fem senaste scrollopt- värdena (KEYSET_ACCEPTABLE
, DYNAMIC_ACCEPTABLE
, FORWARD_ONLY_ACCEPTABLE
, STATIC_ACCEPTABLE
eller FAST_FORWARD_ACCEPTABLE
) också vara ON
.
STATIC
markörer öppnas alltid som READ_ONLY
. Det innebär att den underliggande tabellen inte kan uppdateras via den här markören.
Parametern ccopt
De första fyra ccopt-värdena (READ_ONLY
, SCROLL_LOCKS
och båda OPTIMISTIC
värden) utesluts ömsesidigt.
Not
Om du väljer en av de första fyra ccopt-värden avgör om markören är skrivskyddad eller om låsning eller optimistiska metoder används för att förhindra förlorade uppdateringar. Om ett ccopt- värde inte anges är standardvärdet OPTIMISTIC
.
ALLOW_DIRECT
och CHECK_ACCEPTED_TYPES
kan länkas av OR
till något av de fyra första värdena.
UPDT_IN_PLACE
kan länkas av OR
till READ_ONLY
, SCROLL_LOCKS
eller något av de OPTIMISTIC
värdena.
Om CHECK_ACCEPTED_TYPES
är ON
måste minst ett av de fyra senaste ccopt-värdena (READ_ONLY_ACCEPTABLE
, SCROLL_LOCKS_ACCEPTABLE
och något av de OPTIMISTIC_ACCEPTABLE
värdena) också vara PÅ.
Placerade UPDATE
- och DELETE
-funktioner kan endast utföras i hämtningsbufferten och endast om ccopt-värdet är lika med SCROLL_LOCKS
eller OPTIMISTIC
. Om SCROLL_LOCKS
är det angivna värdet kommer åtgärden garanterat att lyckas. Om OPTIMISTIC
är det angivna värdet misslyckas åtgärden om raden har ändrats sedan den senast hämtades.
Orsaken till det här felet är att när OPTIMISTIC
är det angivna värdet utförs en optimistisk valutakontrollfunktion genom att jämföra tidsstämplar eller kontrollsummor, enligt SQL Server. Om någon av dessa rader inte matchar misslyckas åtgärden.
Om du anger UPDT_IN_PLACE
som returvärde styrs följande resultat:
Om den inte anges när du utför en positionerad uppdatering i en tabell med ett unikt index, tar markören bort raden från arbetstabellen och infogar den i slutet av någon av de nyckelkolumner som används av markören, vilket ändrar dessa kolumner.
Om du anger
ON
uppdaterar markören nyckelkolumnerna i arbetstabellens ursprungliga rad.
Parametern bound_param
Parameternamnet ska vara paramdef när PARAMETERIZED_STMT
anges, enligt felmeddelandet i koden. När PARAMETERIZED_STMT
inte har angetts anges inget namn i felmeddelandet.
RPC-överväganden
RPC-RETURN_METADATA
indataflagga kan ställas in på 0x0001
för att begära att markörens valda listmetadata returneras i TDS-strömmen.
Exempel
A. Parametern bound_param
Alla parametrar efter den femte skickas vidare till instruktionsplanen som indataparametrar. Den första parametern måste vara en sträng i följande form:
<parameter_name> <data_type> [ ,... n ]
Efterföljande parametrar används för att skicka de värden som ska ersättas med <parameter_name>
i -instruktionen.