Delen via


sp_cursor (Transact-SQL)

van toepassing op:SQL Server-

Aanvragen voor positioned updates. Met deze procedure worden bewerkingen uitgevoerd op een of meer rijen binnen de ophaalbuffer van een cursor. sp_cursor wordt aangeroepen door ID = 1 op te geven in een TDS-pakket (tabellaire gegevensstroom).

Transact-SQL syntaxisconventies

Syntaxis

sp_cursor cursor , optype , rownum , table
    [ , value [ ...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

De cursorgreep. De cursor parameter is inten kan niet worden NULL. Deze parameter is de handle waarde die wordt gegenereerd door de database-engine en wordt geretourneerd door de sp_cursoropen procedure.

Een vereiste parameter die aangeeft welke bewerking de cursor uitvoert. Voor de parameter optype is een van de volgende waarden vereist.

Waarde Naam Beschrijving
0X0001 UPDATE Wordt gebruikt om een of meer rijen in de ophaalbuffer bij te werken. De rijen die zijn opgegeven in rijnummer opnieuw worden geopend en bijgewerkt.
0x0002 DELETE Wordt gebruikt om een of meer rijen in de ophaalbuffer te verwijderen. De rijen die zijn opgegeven in rijnummer opnieuw worden geopend en verwijderd.
0X0004 INSERT Hiermee voegt u gegevens in zonder een INSERT-instructie te maken.
0X0008 REFRESH Wordt gebruikt om de buffer opnieuw te vullen uit onderliggende tabellen en kan worden gebruikt om de rij te vernieuwen als een update of verwijdering mislukt vanwege optimistisch gelijktijdigheidsbeheer, of na een UPDATE.
0X10 LOCK Zorgt ervoor dat een updatevergrendeling (U) wordt verkregen op de pagina die de opgegeven rij bevat. Deze vergrendeling is compatibel met gedeelde vergrendelingen (S), maar niet met exclusieve vergrendelingen (X) of andere updatevergrendelingen. Kan worden gebruikt om kortdurende vergrendeling te implementeren.
0X20 SETPOSITION Wordt alleen gebruikt wanneer het programma een volgende DELETE of UPDATE instructie gaat uitgeven.
0X40 ABSOLUTE Kan alleen worden gebruikt met UPDATE of DELETE. ABSOLUTE wordt alleen gebruikt met KEYSET cursors (wordt genegeerd voor DYNAMIC cursors) en STATIC cursors kunnen niet worden bijgewerkt.

Opmerking: Als ABSOLUTE is opgegeven op een rij in de sleutelset die niet is opgehaald, kan de bewerking de gelijktijdigheidscontrole mislukken en kan het retourresultaat niet worden gegarandeerd.

rijnummer

Hiermee geeft u op welke van de rijen in de ophaalbuffer de cursor werkt, wordt bijgewerkt of verwijderd. Deze parameter heeft geen invloed op het beginpunt van een RELATIVE, NEXTof PREVIOUS het ophalen van bewerkingen, noch op updates of verwijderingen die worden uitgevoerd met behulp van sp_cursor.

rijnummer is een vereiste parameter die een invoerwaarde aanroept.

  • 1

    Hiermee wordt de eerste rij in de ophaalbuffer opgegeven.

  • 2, 3, 4, ...n

    Hiermee wordt de tweede, derde en vierde rij opgegeven, enzovoort.

  • 0

    Alle rijen in de ophaalbuffer worden opgegeven.

Deze parameter is alleen geldig voor gebruik met UPDATE, DELETE, REFRESHof LOCKoptype waarden.

tabel

Tabelnaam die de tabel identificeert waarop optype van toepassing is wanneer de cursordefinitie betrekking heeft op een join of dubbelzinnige kolomnamen worden geretourneerd door de waarde parameter. Als er geen specifieke tabel is aangewezen, is de standaardwaarde de eerste tabel in de FROM-component. De tabel parameter is optioneel en vereist een tekenreeksinvoerwaarde. De tekenreeks kan worden opgegeven als elk teken of Unicode-gegevenstype of een tabelnaam met meerdere onderdelen.

waarde

Wordt gebruikt om waarden in te voegen of bij te werken. De waarde tekenreeksparameter wordt alleen gebruikt met UPDATE en INSERToptype waarden. De tekenreeks kan worden opgegeven als elk teken of Unicode-gegevenstype.

De parameternamen voor waarde kunnen door de gebruiker worden toegewezen.

Codewaarden retourneren

0 (geslaagd) of 1 (mislukt).

Opmerkingen

De parameter optype

Met uitzondering van de combinaties van SETPOSITION met UPDATE, DELETE, REFRESHof LOCK; of ABSOLUTE met UPDATE of DELETE, sluiten de waarden wederzijds uit.

De SET component van de UPDATE-waarde wordt samengesteld op basis van de waarde parameter.

Een voordeel van het gebruik van de INSERT <optype> waarde is dat u kunt voorkomen dat niet-tekengegevens worden geconverteerd naar tekenindeling voor invoegingen. De waarden worden op dezelfde manier opgegeven als UPDATE. Als er geen vereiste kolommen zijn opgenomen, mislukt de INSERT.

  • De SETPOSITION-waarde heeft geen invloed op het beginpunt van een RELATIVE, NEXTof PREVIOUS ophalen, en geen updates of verwijderingen die worden uitgevoerd met behulp van de sp_cursor-interface. Een getal dat geen rij in de ophaalbuffer opgeeft, resulteert in de positie die wordt ingesteld op 1, zonder dat er een fout wordt geretourneerd. Zodra SETPOSITION is uitgevoerd, blijft de positie van kracht tot de volgende sp_cursorfetch bewerking, T-SQL-FETCH bewerking of sp_cursorSETPOSITION bewerking via dezelfde cursor. Met een volgende sp_cursorfetch bewerking wordt de positie van de cursor ingesteld op de eerste rij in de nieuwe ophaalbuffer, terwijl andere cursoraanroepen geen invloed hebben op de waarde van de positie. SETPOSITION kan worden gekoppeld door een OR component met REFRESH, UPDATE, DELETEof LOCK om de waarde van de positie in te stellen op de laatste gewijzigde rij.

Als een rij in de ophaalbuffer niet wordt opgegeven via de parameter rijnummer, wordt de positie ingesteld op 1, zonder dat er een fout wordt geretourneerd. Zodra de positie is ingesteld, blijft deze van kracht totdat de volgende sp_cursorfetch bewerking, T-SQL-FETCH bewerking of sp_cursorSETPOSITION bewerking wordt uitgevoerd op dezelfde cursor.

SETPOSITION kan worden gekoppeld door een OR-component met REFRESH, UPDATE, DELETEof LOCK om de cursorpositie in te stellen op de laatste gewijzigde rij.

De parameter rijnummer

Indien opgegeven, kan de parameter rijnummer worden geïnterpreteerd als het rijnummer in de sleutelset in plaats van het rijnummer binnen de ophaalbuffer. De gebruiker is verantwoordelijk voor het handhaven van gelijktijdigheidsbeheer. Dit betekent dat u voor SCROLL_LOCKS cursors onafhankelijk een vergrendeling voor de opgegeven rij moet onderhouden (die via een transactie kan worden uitgevoerd). Voor OPTIMISTIC cursors moet u de rij eerder hebben opgehaald om deze bewerking uit te voeren.

De parameter tabel

Als de optype waarde is UPDATE of INSERT en er een volledige update- of invoeginstructie wordt ingediend als de waarde parameter, wordt de waarde die is opgegeven voor tabel genegeerd.

Notitie

Als het gaat om weergaven, kan slechts één tabel die deelneemt aan de weergave, worden gewijzigd. De waarde kolomnamen van parameters moeten de kolomnamen in de weergave weergeven, maar de tabelnaam kan dat zijn van de onderliggende basistabel (in dat geval sp_cursor de weergavenaam vervangt).

De waarde parameter

Er zijn twee alternatieven voor het gebruik van waarde zoals eerder vermeld in de sectie Argumenten:

  1. U kunt een naam gebruiken die @ voorafgegaan door de naam van de kolom in de selectielijst voor benoemde waarde parameters. Een voordeel van dit alternatief is dat gegevensconversie mogelijk niet nodig is.

  2. Gebruik een parameter om een volledige UPDATE- of INSERT-instructie in te dienen, of gebruik meerdere parameters om delen van een UPDATE of INSERT-instructie in te dienen, die de database-engine vervolgens in een volledige instructie bouwt. Voorbeelden vindt u in de sectie Voorbeelden verderop in dit artikel.

Voorbeelden

Alternatieve waardeparameter maakt gebruik van

Voor UPDATE

Wanneer één parameter wordt gebruikt, kan een UPDATE-instructie worden verzonden met behulp van de volgende syntaxis:

[ [ UPDATE <table_name> ] SET ] { <column name> = expression } [ , ...n ]

Als UPDATE <table_name> is opgegeven, wordt een waarde die is opgegeven voor de tabel parameter genegeerd.

Wanneer meerdere parameters worden gebruikt, moet de eerste parameter een tekenreeks in de volgende vorm zijn:

[ SET ] <column name> = expression [ , ...n ]

De volgende parameters moeten de volgende vormen hebben van:

<column name> = expression [ , ...n ]

In dit geval is de <table_name> in de constructed update-instructie het exemplaar dat is opgegeven of standaard is ingesteld door de tabel parameter.

Voor INSERT

Wanneer één parameter wordt gebruikt, kan een INSERT-instructie worden verzonden met behulp van de volgende syntaxis:

[ [ INSERT [ INTO ] <table_name> ] VALUES ] ( <expression> [ , ...n ] )

Als INSERT <table_name> is opgegeven, wordt een waarde die is opgegeven voor de tabel parameter genegeerd.

Wanneer meerdere parameters worden gebruikt, moet de eerste parameter een tekenreeks in de volgende vorm zijn:

[ VALUES ] ( <expression> [ , ...n ] )

De volgende parameters moeten de vorm van expression [ , ...n ]hebben, behalve waar VALUES is opgegeven. In dat geval moet er na de laatste expressie een afsluitende ) zijn. In dit geval is de <table_name> in de samengestelde UPDATE-instructie het tabel parameter opgegeven of standaard ingesteld.

Notitie

Het is mogelijk om één parameter in te dienen als een benoemde parameter, bijvoorbeeld @values. In dit geval kunnen geen andere benoemde parameters worden gebruikt.