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 OPENkombiná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_FETCHhaszná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_FETCHscrollopt é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-SQLSELECTvagyEXECUTEutasítást kell használni, amely egyetlenSELECTutasítást tartalmazó tárolt eljárást hív meg. Ezenkívül aSELECTutasításnak kurzornak kell minősülnie; vagyis nem tudja tartalmazni a kulcsszavakatSELECT INTOvagyFOR BROWSE.Ha
ALLOW_DIRECTvan 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 INTOvagyFOR BROWSEkulcsszavakat tartalmazó nemSELECTutasítások vagySELECTutasí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őSELECTutasításra is. Azokban az esetekben, amikor egySELECTutasí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
SELECTutasítás van, amely kurzornak minősül, vagyKözvetlen utasítás-végrehajtás, ha több utasítás, egyetlen nem
SELECTutasítás vagySELECTutasí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_TYPESOR az első öt érték bármelyikéhez csatolható.
AUTO_FETCH és AUTO_CLOSE a OR csatolhatja FAST_FORWARD.
Ha CHECK_ACCEPTED_TYPESON, akkor az utolsó öt görgetőgombos értékek (KEYSET_ACCEPTABLE, DYNAMIC_ACCEPTABLE, FORWARD_ONLY_ACCEPTABLE, STATIC_ACCEPTABLEvagy FAST_FORWARD_ACCEPTABLE) legalább egyikének is ONkell lennie .
STATIC kurzorok mindig READ_ONLYnyí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_TYPESOR az első négy érték bármelyikéhez csatolható.
UPDT_IN_PLACE csatolható ORREAD_ONLY, SCROLL_LOCKSvagy a OPTIMISTIC értékek egyikéhez.
Ha CHECK_ACCEPTED_TYPESON, 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
ONvan 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.