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


sp_cursor (Transact-SQL)

A következőkre vonatkozik:SQL Server

A kérések helyhez helyezkednek el a frissítések. Ez az eljárás egy vagy több sorban hajt végre műveleteket a kurzor beolvasási pufferén belül. sp_cursor meghívása ID = 1 megadásával történik egy táblázatos adatfolyam-(TDS-) csomagban.

Transact-SQL szintaxis konvenciói

Szintaxis

sp_cursor cursor , optype , rownum , table
    [ , value [ ...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

A kurzorfogópont. A kurzor paraméter int, és nem lehet NULL. Ez a paraméter az adatbázismotor által létrehozott handle érték, amelyet a sp_cursoropen eljárás ad vissza.

optípusos

Kötelező paraméter, amely meghatározza, hogy a kurzor milyen műveletet hajt végre. Az optype paraméterhez az alábbi értékek egyikére van szükség.

Érték Név Leírás
0X0001 UPDATE A beolvasási puffer egy vagy több sorának frissítésére szolgál. A sorszám megadott sorok újra elérhetők és frissülnek.
0x0002 DELETE A beolvasási puffer egy vagy több sorának törlésére szolgál. A sorszám megadott sorok újra elérhetők és törölve lesznek.
0X0004 INSERT Adatok beszúrása INSERT utasítás létrehozása nélkül.
0X0008 REFRESH A puffert a mögöttes táblákból tölti ki újra, és a sor frissítésére használható, ha egy frissítés vagy törlés optimista egyidejűség-vezérlés vagy egy UPDATEután meghiúsul.
0X10 LOCK A megadott sort tartalmazó lapon frissítési zárolás (U) lesz beolvasva. Ez a zárolás kompatibilis a megosztott zárolásokkal (S), de nem kizárólagos zárolásokkal (X) vagy más frissítési zárakkal. Rövid távú zárolás implementálható.
0X20 SETPOSITION Csak akkor használatos, ha a program egy későbbi DELETE vagy UPDATE utasítást fog kiadni.
0X40 ABSOLUTE Csak UPDATE vagy DELETEhasználható. ABSOLUTE csak KEYSET kurzorokkal használható (DYNAMIC kurzorok esetében figyelmen kívül hagyja), és STATIC kurzorok nem frissíthetők.

Megjegyzés: Ha ABSOLUTE van megadva a kulcskészlet egyik sorában, amely nem lett beolvasva, a művelet meghiúsulhat az egyidejűség-ellenőrzés során, és a visszatérési eredmény nem garantálható.

sorszám

Meghatározza, hogy a beolvasási puffer mely soraiban működik a kurzor, mely frissítéseket vagy törléseket végez. Ez a paraméter nem befolyásolja a RELATIVE, NEXTvagy PREVIOUS beolvasási művelet kezdőpontját, sem a sp_cursorhasználatával végrehajtott frissítéseket és törléseket.

sorszám egy kötelező paraméter, amely egy int bemeneti értéket hív meg.

  • 1

    A beolvasási puffer első sorát jelöli.

  • 2, 3, 4, ...n

    A második, a harmadik és a negyedik sort jelöli, és így tovább.

  • 0

    A beolvasási puffer összes sorát jelzi.

Ez a paraméter csak UPDATE, DELETE, REFRESHvagy LOCKoptípusú értékekkel használható.

tábla

Az optípus- táblát azonosító táblanév akkor érvényes, ha a kurzordefiníció illesztést tartalmaz, vagy a érték paraméter nem egyértelmű oszlopneveket ad vissza. Ha nincs konkrét tábla kijelölve, az alapértelmezett érték a FROM záradék első táblája. A tábla paraméter nem kötelező, és sztringbemeneti értéket igényel. A sztring bármely karakter- vagy Unicode-adattípusként, illetve többrészes táblanévként is megadható.

érték

Értékek beszúrására vagy frissítésére szolgál. A érték sztringparaméter csak UPDATE és INSERToptípusú értékekkel használható. A sztring bármilyen karakterként vagy Unicode-adattípusként megadható.

A érték paraméternevét a felhasználó rendelheti hozzá.

Kódértékek visszaadása

0 (sikeres) vagy 1 (hiba).

Megjegyzések

A optype paraméter

Kivéve a SETPOSITIONUPDATE, DELETE, REFRESHvagy LOCK; vagy ABSOLUTEUPDATE vagy DELETEoptípusú értékek kölcsönösen kizárják egymást.

A UPDATE érték SET záradéka a érték paraméterből jön létre.

A INSERT <optype> érték használatának egyik előnye, hogy elkerülhető, hogy a nem karakteres adatokat karakterformátummá alakítsa a beszúrásokhoz. Az értékek ugyanúgy vannak megadva, mint UPDATE. Ha a szükséges oszlopok nem szerepelnek a fájlban, a INSERT sikertelen lesz.

  • A SETPOSITION érték nem befolyásolja a RELATIVE, NEXTvagy PREVIOUS beolvasási művelet kezdőpontját, és nem végez semmilyen frissítést vagy törlést a sp_cursor felületen. Bármely szám, amely nem ad meg egy sort a beolvasási pufferben, az 1állásba kerül, hiba nélkül. A SETPOSITION végrehajtása után a pozíció mindaddig érvényben marad, amíg a következő sp_cursorfetch művelet, a T-SQL FETCH művelet vagy sp_cursorSETPOSITION műveletet ugyanazon a kurzoron keresztül nem hajtja végre. Egy későbbi sp_cursorfetch művelet a kurzor pozícióját az új beolvasási puffer első sorára állítja, míg más kurzorhívások nem befolyásolják a pozíció értékét. SETPOSITION csatolható egy OR záradék REFRESH, UPDATE, DELETEvagy LOCK, hogy a pozíció értékét az utolsó módosított sorra állítsa.

Ha a beolvasási puffer egyik sora nincs megadva a sorszám paraméteren keresztül, a pozíció értéke 1, hiba nélkül. A pozíció beállítása után mindaddig érvényben marad, amíg a következő sp_cursorfetch művelet, a T-SQL FETCH vagy sp_cursorSETPOSITION művelet ugyanazon a kurzoron nem lesz végrehajtva.

SETPOSITION csatolható egy OR záradék REFRESH, UPDATE, DELETEvagy LOCK, hogy a kurzor pozícióját az utolsó módosított sorra állítsa.

A sorszám paraméter

Ha meg van adva, a sorszám paraméter a lekérési pufferben lévő sorszám helyett a kulcskészleten belüli sorszámként értelmezhető. A felhasználó felelős az egyidejűség-vezérlés fenntartásáért. Ez azt jelenti, hogy SCROLL_LOCKS kurzorok esetében egymástól függetlenül kell fenntartania a zárolást az adott sorban (amely tranzakción keresztül is elvégezhető). A OPTIMISTIC kurzorok esetében a művelet végrehajtásához korábban be kell kérnie a sort.

A tábla paraméter

Ha a optype értéke UPDATE vagy INSERT, és a érték paraméterként egy teljes frissítési vagy beszúrási utasítást küld el, a tábla megadott értéke figyelmen kívül lesz hagyva.

Jegyzet

A nézetekhez kapcsolódóan csak egy, a nézetben részt vevő tábla módosítható. A értéknek paraméter oszlopneveinek tükrözniük kell a nézetben szereplő oszlopneveket, de a tábla neve lehet az alapul szolgáló alaptábla neve (ebben az esetben sp_cursor helyettesíti a nézet nevét).

A érték paraméter

Az argumentumok szakaszban korábban ismertetett érték használatára vonatkozó szabályok két alternatívát tartalmaznak:

  1. Bármely elnevezett érték paraméterhez használhat olyan nevet, amely @ elő van állítva a választólistában szereplő oszlop nevére. Ennek az alternatívának az egyik előnye, hogy előfordulhat, hogy nincs szükség adatátalakításra.

  2. Egy paraméterrel elküldhet egy teljes UPDATE vagy INSERT utasítást, vagy több paraméter használatával elküldheti egy UPDATE vagy INSERT utasítás egyes részeit, amelyeket az adatbázismotor ezután teljes utasítássá alakít. Példákat a cikk későbbi, Példák szakaszában talál.

Példák

Alternatív értékparaméter használata

FRISSÍTÉS esetén

Ha egyetlen paramétert használ, előfordulhat, hogy egy UPDATE utasítást a következő szintaxissal küld el:

[ [ UPDATE <table_name> ] SET ] { <column name> = expression } [ , ...n ]

Ha UPDATE <table_name> van megadva, a tábla paraméteréhez megadott értékek figyelmen kívül lesznek hagyva.

Ha több paramétert használ, az első paraméternek sztringnek kell lennie a következő formában:

[ SET ] <column name> = expression [ , ...n ]

A következő paramétereknek a következő formában kell lenniük:

<column name> = expression [ , ...n ]

Ebben az esetben a <table_name> a létrehozott frissítési utasításban az tábla paramétere által megadott vagy alapértelmezett érték.

AZ INSERT-hez

Ha egyetlen paramétert használ, előfordulhat, hogy egy INSERT utasítást a következő szintaxissal küld el:

[ [ INSERT [ INTO ] <table_name> ] VALUES ] ( <expression> [ , ...n ] )

Ha INSERT <table_name> van megadva, a tábla paraméteréhez megadott értékek figyelmen kívül lesznek hagyva.

Ha több paramétert használ, az első paraméternek sztringnek kell lennie a következő formában:

[ VALUES ] ( <expression> [ , ...n ] )

A következő paramétereknek expression [ , ...n ]formájában kell lenniük, kivéve, ha VALUES volt megadva, ebben az esetben az utolsó kifejezés után záró ) kell lennie. Ebben az esetben a <table_name> a létrehozott UPDATE utasításban az tábla paramétere által megadott vagy alapértelmezett érték.

Jegyzet

Egy paraméter elküldhető névvel ellátott paraméterként, például @values. Ebben az esetben más elnevezett paraméterek nem használhatók.