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


sp_cursorfetch (Transact-SQL)

A következőkre vonatkozik:SQL Server

Lekéri egy vagy több sor pufferét az adatbázisból. A pufferben lévő sorok csoportját a kurzor beolvasási pufferéneknevezzük. sp_cursorfetch meghívása ID = 7 megadásával történik egy táblázatos adatfolyam-(TDS-) csomagban.

Transact-SQL szintaxis konvenciói

Szintaxis

sp_cursorfetch cursor
    [ , fetchtype [ , rownum [ , nrows ] ] ]
[ ; ]

É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

Egy kezeli az SQL Server által létrehozott és sp_cursoropenáltal visszaadott értéket. kurzor egy kötelező paraméter, amely egy int bemeneti értéket hív meg. További információ: Megjegyzések szakasz.

fetchtype

Megadja, hogy melyik kurzorpuffert szeretné beolvasni. fetchtype egy választható paraméter, amely a következő egész szám bemeneti értékeinek egyikét igényli.

Érték Név Leírás
0x0001 FIRST Lekéri sor első pufferét. Ha egyenlő 0-nak, a kurzor az eredményhalmaz előtt van, és nem ad vissza sorokat.
0x0002 NEXT Lekéri sorok következő pufferét.
0x0004 PREV Lekéri sorok előző pufferét.

Megjegyzés: A FORWARD_ONLY kurzor PREV használata hibaüzenetet ad vissza, mert FORWARD_ONLY csak egy irányba görgetést támogat.
0x0008 LAST Lekéri sorok utolsó pufferét. Ha egyenlő 0-nak, a kurzor az eredményhalmaz után lesz elhelyezve, és a program nem ad vissza sorokat.

Megjegyzés: A FORWARD_ONLY kurzor LAST használata hibaüzenetet ad vissza, mert FORWARD_ONLY csak egy irányba görgetést támogat.
0x10 ABSOLUTE Lekéri sor sor pufferét a sorszám sortól kezdve.

Megjegyzés: Ha DYNAMIC kurzorhoz vagy FORWARD_ONLY kurzorhoz használja a ABSOLUTE, hibaüzenetet ad vissza, mert FORWARD_ONLY csak egyirányú görgetést támogat.
0x20 RELATIVE Lekéri sorok pufferét az aktuális blokk első sorából sorérték ként megadott sortól kezdve. Ebben az esetben sorszám negatív szám lehet.

Megjegyzés: A FORWARD_ONLY kurzor RELATIVE használata hibaüzenetet ad vissza, mert FORWARD_ONLY csak egy irányba görgetést támogat.
0x80 REFRESH A puffert újra kitölti a mögöttes táblákból.
0x100 INFO A kurzor adatainak lekérése. Ezt az információt a sorszám és paraméterekkel adja vissza. Ezért ha INFO van megadva, sorszám és szelvények lesznek kimeneti paraméterek.
0x200 PREV_NOADJUST Használja, mint PREV. Ha azonban az eredményhalmaz teteje idő előtt jelentkezik, az eredmények eltérőek lehetnek.
0x400 SKIP_UPDT_CNCY A INFOkivételével a másik fetchtype értékkel kell használni.

Jegyzet

A 0x40érték nem támogatott.

További információ: Megjegyzések szakasz.

sorszám

Választható paraméter, amely a ABSOLUTE sorpozíciójának megadására szolgál, és INFObeolvasási típus értékeket, ha csak egész számértékeket használ bemenethez vagy kimenethez, vagy mindkettőhöz. sorszám a fetchtype bitérték RELATIVEsoreltolásaként szolgál. sorszám minden más értéknél figyelmen kívül lesz hagyva. További információ: Megjegyzések szakasz.

Nem kötelező paraméter, amely a beolvasandó sorok számának megadására szolgál. Ha nincs megadva, az alapértelmezett érték 20 sor. Ha adatok visszaadása nélkül szeretné beállítani a pozíciót, adjon meg egy 0értéket. Ha alkalmaz a fetchtypeINFO lekérdezésre, az a lekérdezés sorainak teljes számát adja vissza.

REFRESH fetchtype bitérték figyelmen kívül hagyja. További információ: Megjegyzések szakasz.

Kódértékek visszaadása

A bitérték INFOmegadásakor a visszaadható értékek az alábbi táblázatokban jelennek meg.

Ha nem ad vissza sorokat, a puffer tartalma változatlan marad.

<sorszám> Beállítás:
Ha nincs megnyitva 0
Ha az eredményhalmaz előtt van elhelyezve 0
Ha az eredményhalmaz után van elhelyezve -1
KEYSET és STATIC kurzorokhoz Az eredményhalmaz aktuális pozíciójának abszolút sorszáma
DYNAMIC kurzorok esetén 1
ABSOLUTE A -1 a készlet utolsó sorát adja vissza.

A -2 egy halmaz második és utolsó sorát adja vissza, és így tovább.

Megjegyzés: Ha ebben az esetben egynél több sor lekérésére van szükség, a rendszer az eredményhalmaz utolsó két sorát adja vissza.
<nrows> Beállítás:
Ha nincs megnyitva 0
KEYSET és STATIC kurzorokhoz Általában az aktuális kulcskészlet mérete.

-m, ha a kurzor aszinkron létrehozás alatt áll m ezen a ponton található sorokkal.
DYNAMIC kurzorok esetén -1

Megjegyzések

A kurzor paraméter

A beolvasási műveletek előtt a kurzor alapértelmezett pozíciója az eredményhalmaz első sora előtt van.

A fetchtype paraméter

A SKIP_UPD_CNCYkivételével a fetchtype értékek kölcsönösen kizárják egymást.

Ha SKIP_UPDT_CNCY van megadva, az időbélyeg oszlop értékei nem lesznek beírva a kulcskészlettáblába egy sor lekérése vagy frissítésekor. Ha a kulcskészletsor frissítése folyamatban van, az időbélyeg-oszlopok értékei az előző értékként maradnak. Ha beszúrja a kulcskészletsort, az időbélyegoszlopok értékei nem lesznek meghatározva.

KEYSET kurzorok esetében ez azt jelenti, hogy a billentyűkészlettáblában az utolsó nemskip FETCHmegadott értékek vannak beállítva, ha az egyiket végrehajtották. Ha nem, akkor a populáció során beállított értékek.

A DYNAMIC kurzorok esetében ez azt jelenti, hogy ha a kihagyás frissítéssel történik, az ugyanazokat az eredményeket eredményezi, mint KEYSET. Bármely más beolvasási típus esetén a kulcskészlettábla csonkolva lesz. Ez azt jelenti, hogy a sorok beszúrása folyamatban van, és az időbélyegoszlopok értékei nem definiálva. Ezért ha DYNAMIC kurzorokhoz futtat sp_cursorfetch, ne használja a SKIP_UPDT_CNCY a REFRESHkívüli műveletekhez.

Ha a beolvasási művelet meghiúsul, mert a kért kurzor pozíció meghaladja az eredményhalmazt, a kurzor pozíciója közvetlenül az utolsó sor után van beállítva. Ha a beolvasási művelet meghiúsul, mert a kért kurzor pozíciója az eredményhalmaz előtt van, a kurzor pozíciója az első sor előtt van beállítva.

A sorszám paraméter

Ha sorszámhasznál, a puffer a megadott sortól kezdve megtelik.

A fetchtype érték ABSOLUTE a sorszám pozíciójára utal a teljes eredményhalmazon belül. A ABSOLUTE negatív szám azt határozza meg, hogy a művelet az eredményhalmaz végétől számítja a sorokat.

A fetchtype érték RELATIVE a kurzor aktuális puffer elején lévő pozíciójához viszonyítva sorszám pozíciójára utal. A RELATIVE negatív szám azt határozza meg, hogy a kurzor az aktuális kurzor pozíciójától visszafelé haladjon.

A paraméter

A fetchtype értékek REFRESH és INFO figyelmen kívül hagyják ezt a paramétert.

Ha olyan fetchtype értéket ad meg FIRST, amely értéke 0, a kurzor a beolvasási puffer sorait nem tartalmazó eredménykészlet elé kerül.

Ha olyan fetchtype értéket ad meg LAST, amely 0 érték, a kurzor az aktuális beolvasási puffer sorait nem tartalmazó eredményhalmaz után lesz elhelyezve.

A NEXT, PREV, ABSOLUTE, RELATIVEés PREV_NOADJUSTfetchtype értéke esetén a 0 értéke érvénytelen.

RPC-szempontok

Az RPC visszatérési állapota azt jelzi, hogy a kulcskészlet méretparamétere végleges-e vagy sem; vagyis ha a kulcskészlet vagy az ideiglenes tábla aszinkron módon van feltöltve.

Az RPC állapotparamétere az alábbi táblázatban látható értékek egyikére van beállítva.

Érték Leírás
0 Az eljárás sikeresen lefutott.
0x0001 Az eljárás nem sikerült.
0x0002 A negatív irányba irányuló beolvasás miatt a kurzor pozíciója az eredményhalmaz elejére lett beállítva, amikor a beolvasás logikailag az eredmények előtt lett volna.
0x10 A kurzor automatikusan bezárult.

A sorok általában eredményhalmazként jelennek meg: oszlopformátum (0x2a), sorok (0xd1), majd DONE (0xfd). A metaadat-jogkivonatok a sp_cursoropen: 0x81, 0xa5 és 0xa4 az SQL Server-felhasználók számára megadott formátumban lesznek elküldve stb. A sorállapotjelzők rejtett oszlopokként lesznek elküldve, hasonlóan BROWSE módhoz, minden sor végén az oszlopnév sorállapotával és adattípusával, int. Ez a sorállapot-oszlop az alábbi táblázatban látható értékek egyikével rendelkezik.

Érték Leírás
0x0001 FETCH_SUCCEEDED
0x0002 FETCH_MISSING

Mivel a TDS-protokoll nem tudja elküldeni a záró állapotoszlopot az előző oszlopok elküldése nélkül, a rendszer a hiányzó sorokra vonatkozó hamis adatokat küldi el. A null értékű mezők értéke null, a rögzített hosszmezők pedig a 0, az üres vagy az adott oszlop alapértelmezett értékére vannak beállítva.

A DONE sorszám mindig 0. A DONE üzenet a tényleges eredményhalmaz sorszámát tartalmazza, és hiba vagy tájékoztató üzenetek jelenhetnek meg a TDS-üzenetek között.

Ha azt szeretné, hogy a kurzor kijelölési listájával kapcsolatos metaadatok visszakerüljenek a TDS-adatfolyamba, állítsa az RPC RETURN_METADATA bemeneti jelzőt 1.

Példák

Egy. Kurzor pozíciójának módosítása a PREV használatával

Tegyük fel, hogy a kurzor h2 olyan eredményhalmazt hoz létre, amely a következő tartalommal rendelkezik az aktuális pozícióval, ahogyan az látható:

row 1 contents
row 2 contents
row 3 contents
row 4 contents  <-- current position
row 5 contents
row 6 contents

Ezután egy sp_cursorfetchPREV, ahol 5 logikailag az eredményhalmaz első sora elé helyezné a kurzort. Ezekben az esetekben a kurzor úgy van beállítva, hogy az első sornál kezdődjön, és visszaadja a kért sorok számát. Ez gyakran azt jelenti, hogy olyan sorokat ad vissza, amelyek a PRIOR beolvasási pufferben voltak.

Jegyzet

Ez a pontos eset, amikor az RPC állapotparamétere 2-re van állítva.

B. A PREV_NOADJUST használatával kevesebb sort ad vissza, mint a PREV

PREV_NOADJUST soha nem tartalmazza a visszaadott sorok blokkjának aktuális kurzorpozíciójában vagy után lévő sorokat. Azokban az esetekben, amikor PREV az aktuális pozíció után ad vissza sorokat, PREV_NOADJUST a kértnél kevesebb sort ad vissza . Az A. példában szereplő jelenlegi pozíciót figyelembe véve PREV alkalmazásakor sp_cursorfetch (h2, 4, 1, 5) a következő sorokat olvassa be:

row1 contents
row2 contents
row3 contents
row4 contents
row5 contents

A PREV_NOADJUST alkalmazásakor azonban sp_cursorfetch (h2, 512, 6, 5) csak a következő sorokat olvassa be:

row1 contents
row2 contents
row3 contents