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 NULLen 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_FETCHscrollopt 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_DIRECTniet is opgegeven, moet een Transact-SQLSELECT- ofEXECUTE-instructie voor een opgeslagen procedure met éénSELECTinstructie worden gebruikt. Bovendien moet deSELECT-instructie als cursor kwalificeren; dat wil gezegd, het kan de trefwoordenSELECT INTOofFOR BROWSEniet bevatten.Als
ALLOW_DIRECTis opgegeven, kan dit leiden tot een of meer Transact-SQL instructies, inclusief instructies die andere opgeslagen procedures uitvoeren met meerdere instructies. Niet-SELECTinstructies of eenSELECT-instructie die de trefwoordenSELECT INTOofFOR BROWSEbevat, worden uitgevoerd en leiden niet tot het maken van een cursor. Hetzelfde geldt voor elkeSELECTinstructie die is opgenomen in een batch met meerdere instructies. In gevallen waarin eenSELECTinstructie componenten bevat die alleen betrekking hebben op cursors, worden deze componenten genegeerd. Wanneer de waarde van bijvoorbeeld0x2002is, is dit een aanvraag voor:Een cursor met schuifvergrendelingen, als er slechts één
SELECTinstructie is die als cursor in aanmerking komt, ofEen directe instructieuitvoering als er meerdere instructies zijn, één niet-
SELECTinstructie of eenSELECT-instructie die niet als cursor in aanmerking komt.
De parameter scrollopt
De eerste vijf scrollopt waarden (KEYSEY, DYNAMIC, FORWARD_ONLY, STATICen 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_FORWARDworden gekoppeld.
Als CHECK_ACCEPTED_TYPESONis, moeten ten minste één van de laatste vijf waarden (KEYSET_ACCEPTABLE, DYNAMIC_ACCEPTABLE, FORWARD_ONLY_ACCEPTABLE, STATIC_ACCEPTABLEof FAST_FORWARD_ACCEPTABLE) ook ONzijn.
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_LOCKSen 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_LOCKSof 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_ACCEPTABLEen 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
ONis 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.