Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Begär positionerade uppdateringar. Den här proceduren utför åtgärder på en eller flera rader i en hämtningsbuffert för markören.
sp_cursor
anropas genom att ange ID = 1
i ett TDS-paket (Tabular Data Stream).
Transact-SQL syntaxkonventioner
Syntax
sp_cursor cursor , optype , rownum , table
[ , value [ ...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
Markörhandtaget.
-markören parametern är intoch kan inte NULL
. Den här parametern är det handle
värde som genereras av databasmotorn och returneras av sp_cursoropen
-proceduren.
optype
En obligatorisk parameter som anger vilken åtgärd markören utför. Parametern optype kräver något av följande värden.
Värde | Namn | Beskrivning |
---|---|---|
0X0001 |
UPDATE |
Används för att uppdatera en eller flera rader i hämtningsbufferten. Raderna som anges i radnummer är återåtkomst och uppdaterade. |
0x0002 |
DELETE |
Används för att ta bort en eller flera rader i hämtningsbufferten. Raderna som anges i radnummer nås igen och tas bort. |
0X0004 |
INSERT |
Infogar data utan att skapa en INSERT -instruktion. |
0X0008 |
REFRESH |
Används för att fylla på bufferten från underliggande tabeller och kan användas för att uppdatera raden om en uppdatering eller borttagning misslyckas på grund av optimistisk samtidighetskontroll eller efter en UPDATE . |
0X10 |
LOCK |
Gör att ett uppdateringslås (U) hämtas på sidan som innehåller den angivna raden. Det här låset är kompatibelt med delade lås (S) men inte med exklusiva lås (X) eller andra uppdateringslås. Kan användas för att implementera kortsiktig låsning. |
0X20 |
SETPOSITION |
Används endast när programmet ska utfärda en efterföljande DELETE - eller UPDATE -instruktion. |
0X40 |
ABSOLUTE |
Kan bara användas med UPDATE eller DELETE .
ABSOLUTE används endast med KEYSET markörer (ignoreras för DYNAMIC markörer) och STATIC markörer kan inte uppdateras.Obs! Om ABSOLUTE anges på en rad i nyckeluppsättningen som inte har hämtats kan åtgärden misslyckas med samtidighetskontrollen och returresultatet kan inte garanteras. |
radnummer
Anger vilka av raderna i hämtningsbufferten som markören arbetar med, uppdaterar eller tar bort. Den här parametern påverkar inte startpunkten för någon RELATIVE
, NEXT
eller PREVIOUS
hämtningsåtgärd, eller några uppdateringar eller borttagningar som utförs med hjälp av sp_cursor
.
radnummer är en obligatorisk parameter som anropar ett int indatavärde.
1
Betyder den första raden i hämtningsbufferten.
2, 3, 4, ...n
Betyder den andra, tredje och fjärde raden och så vidare.
0
Anger alla rader i hämtningsbufferten.
Den här parametern är endast giltig för användning med UPDATE
, DELETE
, REFRESH
eller LOCK
optype- värden.
tabell
Tabellnamn som identifierar tabellen som optype gäller för när markördefinitionen omfattar en koppling eller tvetydiga kolumnnamn returneras av värdet parameter. Om ingen specifik tabell har angetts är standardvärdet den första tabellen i FROM
-satsen. Parametern tabell är valfri och kräver ett strängindatavärde. Strängen kan anges som valfritt tecken eller Unicode-datatyp eller ett tabellnamn i flera delar.
värde
Används för att infoga eller uppdatera värden.
-värdet strängparametern används endast med UPDATE
- och INSERT
optype- värden. Strängen kan anges som valfritt tecken eller Unicode-datatyp.
Parameternamnen för värde kan tilldelas av användaren.
Returnera kodvärden
0
(lyckades) eller 1
(fel).
Anmärkningar
Parametern optype
Förutom kombinationer av SETPOSITION
med UPDATE
, DELETE
, REFRESH
eller LOCK
; eller ABSOLUTE
med antingen UPDATE
eller DELETE
utesluter optype värden ömsesidigt.
SET
-satsen för UPDATE
-värdet skapas från -värdet parametern.
En fördel med att använda värdet INSERT <optype>
är att du kan undvika att konvertera icke-teckendata till teckenformat för infogningar. Värdena anges på samma sätt som UPDATE
. Om några obligatoriska kolumner inte ingår misslyckas INSERT
.
- Värdet för
SETPOSITION
påverkar inte startpunkten för någonRELATIVE
,NEXT
ellerPREVIOUS
hämtningsåtgärd, och inga uppdateringar eller borttagningar utförs med hjälp avsp_cursor
-gränssnittet. Tal som inte anger en rad i hämtningsbufferten resulterar i att positionen anges till1
, utan att något fel returneras. NärSETPOSITION
har körts gäller positionen tills nästasp_cursorfetch
åtgärd, T-SQL-FETCH
åtgärd ellersp_cursor
SETPOSITION
åtgärd via samma markör. En efterföljandesp_cursorfetch
-åtgärd anger markörens position till den första raden i den nya hämtningsbufferten medan andra marköranrop inte påverkar positionens värde.SETPOSITION
kan länkas av enOR
-sats medREFRESH
,UPDATE
,DELETE
ellerLOCK
för att ange positionens värde till den senast ändrade raden.
Om en rad i hämtningsbufferten inte anges via parametern radnummer anges positionen till 1, utan att något fel returneras. När positionen har angetts gäller den tills nästa sp_cursorfetch
åtgärd, T-SQL-FETCH
åtgärd eller sp_cursor
SETPOSITION
åtgärd utförs på samma markör.
SETPOSITION
kan länkas av en OR
-sats med REFRESH
, UPDATE
, DELETE
eller LOCK
för att ange markörens position till den senast ändrade raden.
Parametern radnummer
Om det anges kan parametern radnummer tolkas som radnumret i nyckeluppsättningen i stället för radnumret i hämtningsbufferten. Användaren ansvarar för att säkerställa att samtidighetskontroll upprätthålls. Det innebär att för SCROLL_LOCKS
markörer måste du oberoende upprätthålla ett lås på den angivna raden (vilket kan göras via en transaktion). För OPTIMISTIC
markörer måste du tidigare ha hämtat raden för att utföra den här åtgärden.
Parametern tabell
Om det optype- värdet är UPDATE
eller INSERT
och en fullständig uppdaterings- eller insert-instruktion skickas som värde parameter, ignoreras det värde som anges för tabell.
Not
När det gäller vyer kan endast en tabell som deltar i vyn ändras. Det värdet parameterkolumnnamn måste återspegla kolumnnamnen i vyn, men tabellnamnet kan vara namnet på den underliggande bastabellen (i vilket fall sp_cursor
ersätter vynamnet).
Parametern värde
Det finns två alternativ till reglerna för att använda värde enligt ovan i avsnittet Argument:
Du kan använda ett namn som
@
har förberetts för namnet på kolumnen i select-list för alla namngivna värde parametrar. En fördel med det här alternativet är att datakonvertering kanske inte behövs.Använd en parameter för att antingen skicka en fullständig
UPDATE
- ellerINSERT
-instruktion eller använda flera parametrar för att skicka delar av enUPDATE
- ellerINSERT
-instruktion, som databasmotorn sedan bygger in i en fullständig instruktion. Exempel finns i avsnittet Exempel senare i den här artikeln.
Exempel
Alternativ värdeparameter använder
För UPPDATERING
När en enskild parameter används kan en UPDATE
-instruktion skickas med följande syntax:
[ [ UPDATE <table_name> ] SET ] { <column name> = expression } [ , ...n ]
Om UPDATE <table_name>
anges ignoreras alla värden som anges för -tabellen parametern.
När flera parametrar används måste den första parametern vara en sträng i följande formulär:
[ SET ] <column name> = expression [ , ...n ]
Följande parametrar måste vara i form av:
<column name> = expression [ , ...n ]
I det här fallet är den <table_name>
i den konstruerade uppdateringssatsen den som antingen anges eller är standardinställningen för den tabell parametern.
För INSERT
När en enskild parameter används kan en INSERT
-instruktion skickas med följande syntax:
[ [ INSERT [ INTO ] <table_name> ] VALUES ] ( <expression> [ , ...n ] )
Om INSERT <table_name>
anges ignoreras alla värden som anges för -tabellen parametern.
När flera parametrar används måste den första parametern vara en sträng i följande formulär:
[ VALUES ] ( <expression> [ , ...n ] )
De efterföljande parametrarna måste vara i form av expression [ , ...n ]
, förutom när VALUES
angavs, i vilket fall det måste finnas en avslutande )
efter det sista uttrycket. I det här fallet är <table_name>
i den konstruerade UPDATE
-instruktionen den som antingen anges eller är standardinställningen för den tabell parametern.
Not
Det går att skicka en parameter som en namngiven parameter, till exempel @values
. I det här fallet kan inga andra namngivna parametrar användas.