Megosztás a következőn keresztül:


sp_cursoropen (Transact-SQL)

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-SQL SELECT vagy EXECUTE utasítást kell használni, amely egyetlen SELECT utasítást tartalmazó tárolt eljárást hív meg. Ezenkívül a SELECT utasításnak kurzornak kell minősülnie; vagyis nem tudja tartalmazni a kulcsszavakat SELECT INTO vagy FOR 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. A SELECT INTO vagy FOR BROWSE kulcsszavakat tartalmazó nemSELECT utasítások vagy SELECT 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 egy SELECT 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éke 0x2002, 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, vagy

    • Közvetlen utasítás-végrehajtás, ha több utasítás, egyetlen nemSELECT utasítás vagy SELECT 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_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.