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-
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
, NEXT
of 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
, REFRESH
of LOCK
optype 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 INSERT
optype 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
, REFRESH
of 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 eenRELATIVE
,NEXT
ofPREVIOUS
ophalen, en geen updates of verwijderingen die worden uitgevoerd met behulp van desp_cursor
-interface. Een getal dat geen rij in de ophaalbuffer opgeeft, resulteert in de positie die wordt ingesteld op1
, zonder dat er een fout wordt geretourneerd. ZodraSETPOSITION
is uitgevoerd, blijft de positie van kracht tot de volgendesp_cursorfetch
bewerking, T-SQL-FETCH
bewerking ofsp_cursor
SETPOSITION
bewerking via dezelfde cursor. Met een volgendesp_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 eenOR
component metREFRESH
,UPDATE
,DELETE
ofLOCK
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_cursor
SETPOSITION
bewerking wordt uitgevoerd op dezelfde cursor.
SETPOSITION
kan worden gekoppeld door een OR
-component met REFRESH
, UPDATE
, DELETE
of 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:
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.Gebruik een parameter om een volledige
UPDATE
- ofINSERT
-instructie in te dienen, of gebruik meerdere parameters om delen van eenUPDATE
ofINSERT
-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.