Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Megnyitja a kurzort.
sp_cursoropen
meghatározza a kurzor és a kurzor beállításaihoz társított SQL-utasítást, majd feltölti a kurzort.
sp_cursoropen
egyenértékű a Transact-SQL utasítások DECLARE_CURSOR
és OPEN
kombinációjával. Ezt az eljárást úgy hívjuk meg, hogy ID = 2
egy táblázatos adatfolyam-csomagban (TDS- csomagban) adhatja meg.
Transact-SQL szintaxis konvenciói
Szintaxis
sp_cursoropen cursor OUTPUT
, stmt
[ , scrollopt [ OUTPUT ]
[ , ccopt [ OUTPUT ]
[ , rowcount OUTPUT [ , boundparam ] [ , ...n ] ] ] ]
[ ; ]
Érvek
Fontos
A kiterjesztett tárolt eljárások argumentumait a Szintaxis szakaszban leírt sorrendben kell megadni. Ha a paraméterek sorrenden kívül vannak beírva, hibaüzenet jelenik meg.
kurzor
SQL Server által létrehozott kurzorazonosító.
kurzor egy handle
érték, amelyet a kurzort érintő minden további eljárásnál meg kell adni, például sp_cursorfetch
. A kurzor paraméter int, és nem lehet NULL
.
kurzor lehetővé teszi, hogy több kurzor is aktív legyen egyetlen adatbázis-kapcsolaton.
stmt
A kurzor eredménykészletét meghatározó kötelező paraméter. Bármely karakterlánctípus érvényes lekérdezési sztringje (szintaxisa és kötése) (Unicode-tól, mérettől stb.) érvényes stmt értéktípusként szolgálhat.
scrollopt
Görgetési lehetőség. A scrollopt paraméter int, alapértelmezett értéke NULL
, és az alábbi értékek egyike lehet.
Érték | Leírás |
---|---|
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 |
Mivel lehetséges, hogy a kért érték nem felel meg a stmtáltal definiált kurzornak, ez a paraméter bemenetként és kimenetként is szolgál. Ilyen esetekben az SQL Server egy megfelelő értéket rendel hozzá.
ccopt
Egyidejűség-vezérlési lehetőség. ccopt egy választható paraméter, amely az alábbi bemeneti értékek egyikét igényli.
Érték | Leírás |
---|---|
0x0001 |
READ_ONLY |
0x0002 |
SCROLL_LOCKS (korábban LOCKCC ) |
0x0004 |
OPTIMISTIC (korábban OPTCC ) |
0x0008 |
OPTIMISTIC (korábban 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 |
Ahogy scrollopt, az SQL Server is felülbírálhatja a kért ccopt értékeket.
sorszám
A AUTO_FETCH
használandó lekérési puffersorok száma. Az alapértelmezett érték 20 sor.
sorszám eltérően viselkedik, ha bemeneti értékként van hozzárendelve a visszatérési értékhez képest.
Bemeneti értékként | Visszatérési értékként |
---|---|
A AUTO_FETCH scrollopt érték megadásakor sorszám a beolvasási pufferbe helyezendő sorok számát jelöli.Megjegyzés: > 0 érvényes érték, ha AUTO_FETCH van megadva, de máskülönben figyelmen kívül hagyja. |
Az eredményhalmaz sorainak számát jelöli, kivéve, ha a scrolloptAUTO_FETCH érték van megadva. |
boundparam
A további paraméterek használatát jelzi.
boundparam egy választható paraméter, amelyet akkor kell megadni, ha a scrolloptPARAMETERIZED_STMT
értéke ON
.
Kódértékek visszaadása
Ha nincs hiba, sp_cursoropen
az alábbi értékek egyikét adja vissza.
Érték | Leírás |
---|---|
0 |
Az eljárás sikeresen lefutott. |
0x0001 |
Hiba történt a végrehajtás során (kisebb hiba, amely nem elég súlyos ahhoz, hogy hibát jelez a műveletben). |
0x0002 |
Folyamatban van egy aszinkron művelet. |
0x0002 |
Folyamatban van egy FETCH művelet. |
A |
Ez a kurzor felszabadítva lett, és nem érhető el. |
Hiba esetén előfordulhat, hogy a visszatérési értékek inkonzisztensek, és a pontosság nem garantálható.
Ha a sorszám paramétert adja meg visszatérési értékként, a következő eredményhalmaz következik be.
Érték | Leírás |
---|---|
-1 |
Akkor adja vissza, ha a sorok száma ismeretlen vagy nem alkalmazható. |
-n |
Az aszinkron sokaság érvénybe lépésekor lesz visszaadva. A beolvasási pufferbe helyezett sorok számát jelöli, amikor a scrolloptAUTO_FETCH értéke meg van adva. |
Ha az RPC használatban van, a visszatérési értékek a következők.
Érték | Leírás |
---|---|
0 |
Az eljárás sikeres. |
1 |
Az eljárás nem sikerült. |
2 |
A billentyűkészlet-kurzor aszinkron módon jön létre. |
16 |
A kurzor automatikusan bezárult. |
Ha a sp_cursoropen
eljárás sikeresen végrehajtja, az RPC visszaadja a paramétereket és egy TDS-oszlopformátum-információkat (0xa0
és 0xa1
üzeneteket) tartalmazó eredménykészletet. Sikertelenség esetén a rendszer egy vagy több TDS-hibaüzenetet küld. Mindkét esetben a rendszer nem ad vissza soradatokat, és a DONE
üzenetszám 0
.
0x81
(SELECT
utasítások esetén standard) a 0xa5
és 0xa4
jogkivonat-adatfolyamokkal együtt lesz visszaadva.
Megjegyzések
Az stmt paraméter
Ha stmt egy tárolt eljárás végrehajtását határozza meg, a bemeneti paraméterek vagy állandóként definiálhatók az stmt sztring részeként, vagy kötöttparam argumentumként adhatók meg. A deklarált változók így átadhatók kötött paraméterként.
Az stmt paraméter megengedett tartalma attól függ, hogy a ccoptALLOW_DIRECT
visszatérési értékét a OR
a ccopt többi értékéhez kapcsolta-e:
Ha nincs megadva
ALLOW_DIRECT
, akkor egy Transact-SQLSELECT
vagyEXECUTE
utasítást kell használni, amely egyetlenSELECT
utasítást tartalmazó tárolt eljárást hív meg. Ezenkívül aSELECT
utasításnak kurzornak kell minősülnie; vagyis nem tudja tartalmazni a kulcsszavakatSELECT INTO
vagyFOR BROWSE
.Ha
ALLOW_DIRECT
van megadva, ez egy vagy több Transact-SQL utasítást eredményezhet, beleértve az egyéb tárolt eljárásokat több utasítással végrehajtó utasításokat is. ASELECT INTO
vagyFOR BROWSE
kulcsszavakat tartalmazó nemSELECT
utasítások vagySELECT
utasítások végrehajtása nem eredményezi a kurzor létrehozását. Ugyanez vonatkozik a több utasításból álló kötegben szereplőSELECT
utasításra is. Azokban az esetekben, amikor egySELECT
utasítás csak a kurzorokra vonatkozó záradékokat tartalmaz, a rendszer figyelmen kívül hagyja ezeket a záradékokat. Ha például ccopt értéke0x2002
, ez a következő kérés:Görgetőzárat tartalmazó kurzor, ha csak egyetlen
SELECT
utasítás van, amely kurzornak minősül, vagyKözvetlen utasítás-végrehajtás, ha több utasítás, egyetlen nem
SELECT
utasítás vagySELECT
utasítás nem minősül kurzornak.
A scrollopt paraméter
Az első öt görgetőlap értékek (KEYSEY
, DYNAMIC
, FORWARD_ONLY
, STATIC
és FAST_FORWARD
) kölcsönösen kizárják egymást.
PARAMETERIZED_STMT
és CHECK_ACCEPTED_TYPES
OR
az első öt érték bármelyikéhez csatolható.
AUTO_FETCH
és AUTO_CLOSE
a OR
csatolhatja FAST_FORWARD
.
Ha CHECK_ACCEPTED_TYPES
ON
, akkor az utolsó öt görgetőgombos értékek (KEYSET_ACCEPTABLE
, DYNAMIC_ACCEPTABLE
, FORWARD_ONLY_ACCEPTABLE
, STATIC_ACCEPTABLE
vagy FAST_FORWARD_ACCEPTABLE
) legalább egyikének is ON
kell lennie .
STATIC
kurzorok mindig READ_ONLY
nyílnak meg. Ez azt jelenti, hogy a mögöttes tábla nem frissíthető ezen a kurzoron keresztül.
A ccopt paraméter
Az első négy ccopt értékek (READ_ONLY
, SCROLL_LOCKS
és OPTIMISTIC
értékek) kölcsönösen kizárják egymást.
Jegyzet
Ha az első négy ccopt érték közül választ, az azt határozza meg, hogy a kurzor írásvédett-e, vagy zárolási vagy optimista módszereket használ az elveszett frissítések megelőzésére. Ha nincs megadva ccopt érték, az alapértelmezett érték OPTIMISTIC
.
ALLOW_DIRECT
és CHECK_ACCEPTED_TYPES
OR
az első négy érték bármelyikéhez csatolható.
UPDT_IN_PLACE
csatolható OR
READ_ONLY
, SCROLL_LOCKS
vagy a OPTIMISTIC
értékek egyikéhez.
Ha CHECK_ACCEPTED_TYPES
ON
, akkor az utolsó négy ccopt értékek (READ_ONLY_ACCEPTABLE
, SCROLL_LOCKS_ACCEPTABLE
és a OPTIMISTIC_ACCEPTABLE
értékek egyikének) legalább egyikének be kell kapcsolnia.
A UPDATE
és DELETE
függvények csak a beolvasási pufferen belül végezhetők el, és csak akkor, ha a ccopt értéke SCROLL_LOCKS
vagy OPTIMISTIC
. Ha SCROLL_LOCKS
a megadott érték, a művelet garantáltan sikeres lesz. Ha OPTIMISTIC
a megadott érték, a művelet meghiúsul, ha a sor a legutóbbi beolvasás óta módosult.
Ennek a hibának az az oka, hogy ha OPTIMISTIC
a megadott érték, a rendszer optimista pénznem-vezérlési függvényt hajt végre az SQL Server által meghatározott időbélyegek vagy ellenőrzőösszegek összehasonlításával. Ha bármelyik sor nem egyezik, a művelet meghiúsul.
A UPDT_IN_PLACE
visszatérési értékként való megadása a következő eredményeket szabályozza:
Ha nincs beállítva, amikor egy egyedi indexet tartalmazó táblán végez elhelyezést, a kurzor törli a sort a munkatáblából, és beszúrja a kurzor által használt kulcsoszlopok bármelyikének végére, ami módosítja az oszlopokat.
Ha
ON
van beállítva, a kurzor frissíti a munkatábla eredeti sorában lévő kulcsoszlopokat.
A bound_param paraméter
A paraméter nevének paraméternévnek kell lennie, ha PARAMETERIZED_STMT
van megadva, a kódban szereplő hibaüzenetnek megfelelően. Ha PARAMETERIZED_STMT
nincs megadva, a hibaüzenet nem tartalmaz nevet.
RPC-szempontok
Az RPC RETURN_METADATA
beviteli jelölő 0x0001
állítható be, hogy a kurzorválasztó lista metaadatainak visszaadása a TDS-adatfolyamban legyen.
Példák
Egy. A bound_param paraméter
Az ötödik utáni paramétereket a rendszer bemeneti paraméterekként továbbítja az utasítástervnek. Az első ilyen paraméternek sztringnek kell lennie a következő formában:
<parameter_name> <data_type> [ ,... n ]
A következő paraméterekkel adja át az utasításban szereplő <parameter_name>
helyettesítendő értékeket.