Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server-
Hiermee opent u een cursor.
sp_cursoropen
definieert de SQL-instructie die is gekoppeld aan de cursor- en cursoropties en vult de cursor vervolgens in.
sp_cursoropen
is gelijk aan de combinatie van de Transact-SQL-instructies DECLARE_CURSOR
en OPEN
. Deze procedure wordt aangeroepen door ID = 2
op te geven in een TDS-pakket (tabellaire gegevensstroom).
Transact-SQL syntaxisconventies
Syntaxis
sp_cursoropen cursor OUTPUT
, stmt
[ , scrollopt [ OUTPUT ]
[ , ccopt [ OUTPUT ]
[ , rowcount OUTPUT [ , boundparam ] [ , ...n ] ] ] ]
[ ; ]
Argumenten
Belangrijk
Argumenten voor uitgebreide opgeslagen procedures moeten worden ingevoerd in de specifieke volgorde, zoals beschreven in de sectie Syntaxis. Als de parameters niet in de volgorde zijn ingevoerd, treedt er een foutbericht op.
cursor
Een door SQL Server gegenereerde cursor-id.
cursor is een handle
waarde die moet worden opgegeven voor alle volgende procedures met de cursor, zoals sp_cursorfetch
. De cursor parameter is int en kan niet worden NULL
.
cursor kunnen meerdere cursors actief zijn op één databaseverbinding.
stmt-
Een vereiste parameter waarmee de resultatenset van de cursor wordt gedefinieerd. Elke geldige querytekenreeks (syntaxis en binding) van elk tekenreekstype (ongeacht Unicode, grootte, enzovoort) kan fungeren als een geldig stmt waardetype.
Schuifoptie. De parameter scrollopt is int, met een standaardwaarde van NULL
en kan een van de volgende waarden zijn.
Waarde | Beschrijving |
---|---|
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 |
Vanwege de mogelijkheid dat de aangevraagde waarde niet geschikt is voor de cursor die is gedefinieerd door stmt-, dient deze parameter als invoer en uitvoer. In dergelijke gevallen wijst SQL Server een geschikte waarde toe.
Optie voor gelijktijdigheidsbeheer. is een optionele parameter waarvoor een van de volgende invoerwaarden is vereist.
Waarde | Beschrijving |
---|---|
0x0001 |
READ_ONLY |
0x0002 |
SCROLL_LOCKS (voorheen bekend als LOCKCC ) |
0x0004 |
OPTIMISTIC (voorheen bekend als OPTCC ) |
0x0008 |
OPTIMISTIC (voorheen bekend als 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 |
Net als bij scrollopt, kan SQL Server de aangevraagde waarden overschrijven.
aantal rijen
Het aantal ophaalbufferrijen dat moet worden gebruikt met AUTO_FETCH
. De standaardwaarde is 20 rijen.
rowcount zich anders gedraagt wanneer deze is toegewezen als invoerwaarde versus een retourwaarde.
Als invoerwaarde | Als retourwaarde |
---|---|
Wanneer de AUTO_FETCH scrollopt waarde is opgegeven, geeft rowcount het aantal rijen aan dat in de ophaalbuffer moet worden geplaatst.Opmerking: > 0 is een geldige waarde wanneer AUTO_FETCH is opgegeven, maar anders wordt genegeerd. |
Vertegenwoordigt het aantal rijen in de resultatenset, behalve wanneer de scrolloptAUTO_FETCH waarde is opgegeven. |
afhankelijke
Hiermee wordt het gebruik van extra parameters opgegeven.
boundparam is een optionele parameter die moet worden opgegeven als de PARAMETERIZED_STMT
waarde is ingesteld op ON
.
Codewaarden retourneren
Als er geen fout optreedt, retourneert sp_cursoropen
een van de volgende waarden.
Waarde | Beschrijving |
---|---|
0 |
De procedure is uitgevoerd. |
0x0001 |
Er is een fout opgetreden tijdens de uitvoering (een kleine fout, niet ernstig genoeg om een fout in de bewerking te genereren). |
0x0002 |
Er wordt een asynchrone bewerking uitgevoerd. |
0x0002 |
Er wordt een FETCH bewerking uitgevoerd. |
A |
De toewijzing van deze cursor is opgeheven en is niet beschikbaar. |
Wanneer er een fout optreedt, kunnen de retourwaarden inconsistent zijn en kan de nauwkeurigheid niet worden gegarandeerd.
Wanneer de rowcount parameter is opgegeven als een retourwaarde, vindt de volgende resultatenset plaats.
Waarde | Beschrijving |
---|---|
-1 |
Geretourneerd als het aantal rijen onbekend of niet van toepassing is. |
-n |
Wordt geretourneerd wanneer een asynchrone populatie van kracht is. Vertegenwoordigt het aantal rijen dat in de ophaalbuffer is geplaatst wanneer de scrolloptAUTO_FETCH waarde is opgegeven. |
Als RPC wordt gebruikt, zijn de retourwaarden als volgt.
Waarde | Beschrijving |
---|---|
0 |
De procedure is geslaagd. |
1 |
Procedure is mislukt. |
2 |
Een keysetcursor wordt asynchroon gegenereerd. |
16 |
Er is automatisch een snelcursor gesloten. |
Als de sp_cursoropen
-procedure is uitgevoerd, worden de RPC-retourparameters en een resultatenset met informatie over de TDS-kolomindeling (0xa0
en 0xa1
berichten) verzonden. Als dit niet lukt, worden een of meer TDS-foutberichten verzonden. In beide gevallen worden er geen rijgegevens geretourneerd en wordt het aantal DONE
berichten 0
.
0x81
wordt geretourneerd (standaard voor SELECT
instructies) samen met de 0xa5
- en 0xa4
tokenstreams.
Opmerkingen
De parameter stmt
Als stmt- de uitvoering van een opgeslagen procedure opgeeft, kunnen de invoerparameters worden gedefinieerd als constanten als onderdeel van de stmt tekenreeks, of opgegeven als afhankelijkeparam argumenten. Gedeclareerde variabelen kunnen op deze manier worden doorgegeven als afhankelijke parameters.
De toegestane inhoud van de parameter stmt is afhankelijk van het feit of de ALLOW_DIRECT
retourwaarde door OR
is gekoppeld aan de rest van de waarden:
Als
ALLOW_DIRECT
niet is opgegeven, moet een Transact-SQLSELECT
- ofEXECUTE
-instructie voor een opgeslagen procedure met éénSELECT
instructie worden gebruikt. Bovendien moet deSELECT
-instructie als cursor kwalificeren; dat wil gezegd, het kan de trefwoordenSELECT INTO
ofFOR BROWSE
niet bevatten.Als
ALLOW_DIRECT
is opgegeven, kan dit leiden tot een of meer Transact-SQL instructies, inclusief instructies die andere opgeslagen procedures uitvoeren met meerdere instructies. Niet-SELECT
instructies of eenSELECT
-instructie die de trefwoordenSELECT INTO
ofFOR BROWSE
bevat, worden uitgevoerd en leiden niet tot het maken van een cursor. Hetzelfde geldt voor elkeSELECT
instructie die is opgenomen in een batch met meerdere instructies. In gevallen waarin eenSELECT
instructie componenten bevat die alleen betrekking hebben op cursors, worden deze componenten genegeerd. Wanneer de waarde van bijvoorbeeld0x2002
is, is dit een aanvraag voor:Een cursor met schuifvergrendelingen, als er slechts één
SELECT
instructie is die als cursor in aanmerking komt, ofEen directe instructieuitvoering als er meerdere instructies zijn, één niet-
SELECT
instructie of eenSELECT
-instructie die niet als cursor in aanmerking komt.
De parameter scrollopt
De eerste vijf scrollopt waarden (KEYSEY
, DYNAMIC
, FORWARD_ONLY
, STATIC
en FAST_FORWARD
) sluiten elkaar wederzijds uit.
PARAMETERIZED_STMT
en CHECK_ACCEPTED_TYPES
kunnen worden gekoppeld door OR
aan een van de eerste vijf waarden.
AUTO_FETCH
en AUTO_CLOSE
kunnen door OR
aan FAST_FORWARD
worden gekoppeld.
Als CHECK_ACCEPTED_TYPES
ON
is, moeten ten minste één van de laatste vijf waarden (KEYSET_ACCEPTABLE
, DYNAMIC_ACCEPTABLE
, FORWARD_ONLY_ACCEPTABLE
, STATIC_ACCEPTABLE
of FAST_FORWARD_ACCEPTABLE
) ook ON
zijn.
STATIC
cursors worden altijd geopend als READ_ONLY
. Dit betekent dat de onderliggende tabel niet kan worden bijgewerkt via deze cursor.
De parameter
De eerste vier waarden (READ_ONLY
, SCROLL_LOCKS
en beide OPTIMISTIC
waarden) sluiten elkaar wederzijds uit.
Notitie
Als u een van de eerste vier ccopt waarden kiest, bepaalt u of de cursor alleen-lezen is of als vergrendelings- of optimistische methoden worden gebruikt om verloren updates te voorkomen. Als een waarde niet is opgegeven, wordt de standaardwaarde OPTIMISTIC
.
ALLOW_DIRECT
en CHECK_ACCEPTED_TYPES
kunnen worden gekoppeld door OR
aan een van de eerste vier waarden.
UPDT_IN_PLACE
kunnen door OR
worden gekoppeld aan READ_ONLY
, SCROLL_LOCKS
of een van de OPTIMISTIC
-waarden.
Als CHECK_ACCEPTED_TYPES
is ON
, moet ten minste één van de laatste vier waarden (READ_ONLY_ACCEPTABLE
, SCROLL_LOCKS_ACCEPTABLE
en een van de OPTIMISTIC_ACCEPTABLE
waarden) ook AAN zijn.
Positioned UPDATE
- en DELETE
-functies kunnen alleen binnen de ophaalbuffer worden uitgevoerd en alleen als de waarde gelijk is aan SCROLL_LOCKS
of OPTIMISTIC
. Als SCROLL_LOCKS
de opgegeven waarde is, slaagt de bewerking gegarandeerd. Als OPTIMISTIC
de opgegeven waarde is, mislukt de bewerking als de rij is gewijzigd sinds deze voor het laatst is opgehaald.
De reden voor deze fout is dat wanneer OPTIMISTIC
de opgegeven waarde is, een optimistische valutacontrolefunctie wordt uitgevoerd door tijdstempels of controlesomwaarden te vergelijken, zoals bepaald door SQL Server. Als een van deze rijen niet overeenkomt, mislukt de bewerking.
Het opgeven van UPDT_IN_PLACE
als de retourwaarde bepaalt de volgende resultaten:
Als deze niet is ingesteld bij het uitvoeren van een geplaatste update voor een tabel met een unieke index, verwijdert de cursor de rij uit de werktabel en voegt deze in aan het einde van een van de sleutelkolommen die door de cursor worden gebruikt, waardoor deze kolommen worden gewijzigd.
Als
ON
is ingesteld, werkt de cursor de sleutelkolommen in de oorspronkelijke rij van de werktabel bij.
De parameter bound_param
De parameternaam moet worden paramdef- wanneer PARAMETERIZED_STMT
is opgegeven, volgens het foutbericht in de code. Wanneer PARAMETERIZED_STMT
niet is opgegeven, wordt er geen naam opgegeven in het foutbericht.
RPC-overwegingen
De RPC-RETURN_METADATA
invoervlag kan worden ingesteld op 0x0001
om aan te vragen dat metagegevens van de cursorlijst selecteren wordt geretourneerd in de TDS-stroom.
Voorbeelden
Een. De parameter bound_param
Parameters na de vijfde worden als invoerparameters doorgegeven aan het instructieplan. De eerste parameter moet een tekenreeks in de volgende vorm zijn:
<parameter_name> <data_type> [ ,... n ]
Volgende parameters worden gebruikt om de waarden door te geven die moeten worden vervangen door de <parameter_name>
in de instructie.