sp_cursor (Transact-SQL)
Dotyczy:programu SQL Server
Żądania aktualizacji umieszczonych. Ta procedura wykonuje operacje na co najmniej jednym wierszu w buforze pobierania kursora.
sp_cursor
jest wywoływana przez określenie ID = 1
w pakiecie strumienia danych tabelarycznych (TDS).
Transact-SQL konwencje składni
Składnia
sp_cursor cursor , optype , rownum , table
[ , value [ ...n ] ]
[ ; ]
Argumenty
Ważny
Argumenty dla rozszerzonych procedur składowanych należy wprowadzić w określonej kolejności zgodnie z opisem w sekcji składni. Jeśli parametry są wprowadzane poza kolejnością, wystąpi komunikat o błędzie.
kursora
Uchwyt kursora. Parametr kursora jest inti nie można NULL
. Ten parametr jest wartością handle
wygenerowaną przez aparat bazy danych i zwróconą przez procedurę sp_cursoropen
.
optype
Wymagany parametr, który wyznacza operację wykonywaną przez kursor. Parametr optype wymaga jednej z następujących wartości.
Wartość | Nazwa | Opis |
---|---|---|
0X0001 |
UPDATE |
Służy do aktualizowania co najmniej jednego wiersza w buforze pobierania. Wiersze określone w rownum są ponownie i aktualizowane. |
0x0002 |
DELETE |
Służy do usuwania co najmniej jednego wiersza w buforze pobierania. Wiersze określone w rownum są ponownie i usuwane. |
0X0004 |
INSERT |
Wstawia dane bez tworzenia instrukcji INSERT . |
0X0008 |
REFRESH |
Służy do ponownego wypełniania buforu z tabel bazowych i może służyć do odświeżania wiersza, jeśli aktualizacja lub usunięcie nie powiedzie się z powodu optymistycznej kontrolki współbieżności lub po UPDATE . |
0X10 |
LOCK |
Powoduje uzyskanie blokady aktualizacji (U) na stronie zawierającej określony wiersz. Ta blokada jest zgodna z blokadami udostępnionymi (S), ale nie z blokadami wyłącznymi (X) lub innymi blokadami aktualizacji. Może służyć do implementowania krótkoterminowego blokowania. |
0X20 |
SETPOSITION |
Jest używany tylko wtedy, gdy program wyda kolejną instrukcję DELETE lub UPDATE . |
0X40 |
ABSOLUTE |
Można używać tylko z UPDATE lub DELETE .
ABSOLUTE jest używana tylko w przypadku kursorów KEYSET (jest ignorowana dla DYNAMIC kursorów) i nie można zaktualizować STATIC kursorów.Uwaga: Jeśli ABSOLUTE jest określona w wierszu w zestawie kluczy, który nie został pobrany, operacja może zakończyć się niepowodzeniem sprawdzania współbieżności i nie można zagwarantować wyniku powrotu. |
rownum
Określa, które wiersze w buforze pobierania kursor działa na, aktualizuje lub usuwa. Ten parametr nie ma wpływu na punkt początkowy żadnych RELATIVE
, NEXT
lub PREVIOUS
operacji pobierania, ani żadnych aktualizacji ani usuwania wykonywanych przy użyciu sp_cursor
.
rownum jest wymaganym parametrem, który wywołuje wartość wejściową int.
1
Oznacza pierwszy wiersz w buforze pobierania.
2, 3, 4, ...n
Oznacza drugi, trzeci i czwarty wiersz itd.
0
Oznacza wszystkie wiersze w buforze pobierania.
Ten parametr jest prawidłowy tylko do użycia z wartościamiUPDATE
, DELETE
, REFRESH
lub LOCK
optype.
tabeli
Nazwa tabeli identyfikującej tabelę, która optype ma zastosowanie, gdy definicja kursora obejmuje sprzężenie lub niejednoznaczne nazwy kolumn są zwracane przez wartość parametru. Jeśli nie określono określonej tabeli, wartość domyślna to pierwsza tabela w klauzuli FROM
. Parametr tabeli jest opcjonalny i wymaga wartości wejściowej ciągu. Ciąg można określić jako dowolny znak lub typ danych Unicode albo nazwę tabeli wieloczęściowej.
wartości
Służy do wstawiania lub aktualizowania wartości. Wartość parametr ciągu jest używany tylko z wartościami UPDATE
i INSERT
optype. Ciąg można określić jako dowolny znak lub typ danych Unicode.
Nazwy parametrów wartości można przypisać użytkownikowi.
Zwracanie wartości kodu
0
(powodzenie) lub 1
(niepowodzenie).
Uwagi
Parametr optype
Z wyjątkiem kombinacji SETPOSITION
z UPDATE
, DELETE
, REFRESH
lub LOCK
; lub ABSOLUTE
z wartościami UPDATE
lub DELETE
, wartości optype wzajemnie się wykluczają.
Klauzula SET
wartości UPDATE
jest konstruowana z parametru wartości.
Jedną z zalet użycia wartości INSERT <optype>
jest to, że można uniknąć konwertowania danych innych niż znaki na format znaków dla wstawiania. Wartości są określane w taki sam sposób, jak UPDATE
. Jeśli nie zostaną uwzględnione jakiekolwiek wymagane kolumny, INSERT
zakończy się niepowodzeniem.
- Wartość
SETPOSITION
nie ma wpływu na punkt początkowy żadnychRELATIVE
,NEXT
lubPREVIOUS
operacji pobierania, ani nie ma żadnych aktualizacji ani usuwania wykonywanych przy użyciu interfejsusp_cursor
. Dowolna liczba, która nie określa wiersza w buforze pobierania, powoduje ustawienie pozycji na1
, bez zwracania błędu. Po wykonaniuSETPOSITION
pozycja pozostaje w mocy aż do następnej operacjisp_cursorfetch
, operacjiFETCH
języka T-SQL lubsp_cursor
SETPOSITION
operacji przez ten sam kursor. Kolejna operacjasp_cursorfetch
ustawia położenie kursora na pierwszy wiersz w nowym buforze pobierania, podczas gdy inne wywołania kursora nie wpływają na wartość pozycji.SETPOSITION
można połączyć za pomocą klauzuliOR
zREFRESH
,UPDATE
,DELETE
lubLOCK
, aby ustawić wartość pozycji na ostatni zmodyfikowany wiersz.
Jeśli wiersz w buforze pobierania nie jest określony za pośrednictwem parametru rownum, pozycja jest ustawiona na 1, bez zwracanego błędu. Po ustawieniu pozycji pozostaje ona w mocy do momentu wykonania następnej operacji sp_cursorfetch
, operacji T-SQL FETCH
lub sp_cursor
SETPOSITION
operacji na tym samym kursorze.
SETPOSITION
można połączyć za pomocą klauzuli OR
z REFRESH
, UPDATE
, DELETE
lub LOCK
, aby ustawić położenie kursora na ostatni zmodyfikowany wiersz.
Parametr rownum
W przypadku określenia parametru rownum można interpretować jako numer wiersza w zestawie kluczy zamiast numeru wiersza w buforze pobierania. Użytkownik jest odpowiedzialny za zapewnienie utrzymania kontroli współbieżności. Oznacza to, że w przypadku SCROLL_LOCKS
kursorów należy niezależnie zachować blokadę w danym wierszu (co można zrobić za pośrednictwem transakcji). W przypadku OPTIMISTIC
kursorów musisz wcześniej pobrać wiersz, aby wykonać tę operację.
Parametr tabeli
Jeśli wartość optype jest UPDATE
lub INSERT
, a pełna aktualizacja lub instrukcja wstawiania jest przesyłana jako parametr wartości, wartość określona dla tabeli jest ignorowana.
Nuta
Jeśli chodzi o widoki, może zostać zmodyfikowana tylko jedna tabela uczestnicząca w widoku. Wartość nazwy kolumn parametrów muszą odzwierciedlać nazwy kolumn w widoku, ale nazwa tabeli może być nazwą bazowej tabeli bazowej (w tym przypadku sp_cursor
zastępuje nazwę widoku).
Parametr wartości
Istnieją dwie alternatywy dla reguł używania wartości jak określono wcześniej w sekcji Argumenty:
Możesz użyć nazwy, która jest
@
poprzedzana nazwą kolumny na liście wyboru dla dowolnych nazwanych wartości parametrów. Jedną z zalet tej alternatywy jest to, że konwersja danych może nie być konieczna.Użyj parametru , aby przesłać kompletną instrukcję
UPDATE
lubINSERT
albo użyć wielu parametrów do przesyłania części instrukcjiUPDATE
lubINSERT
, którą aparat bazy danych następnie kompiluje w pełną instrukcję. Przykłady można znaleźć w sekcji przykłady w dalszej części tego artykułu.
Przykłady
Alternatywne użycie parametru wartości
W przypadku aktualizacji
W przypadku użycia pojedynczego parametru instrukcja UPDATE
może zostać przesłana przy użyciu następującej składni:
[ [ UPDATE <table_name> ] SET ] { <column name> = expression } [ , ...n ]
Jeśli określono UPDATE <table_name>
, każda wartość określona dla tabeli jest ignorowana.
W przypadku użycia wielu parametrów pierwszy parametr musi być ciągiem w następującym formularzu:
[ SET ] <column name> = expression [ , ...n ]
Kolejne parametry muszą mieć postać:
<column name> = expression [ , ...n ]
W takim przypadku <table_name>
w skonstruowanej instrukcji aktualizacji jest jednym z określonych lub domyślnych parametrów tabeli.
W przypadku instrukcji INSERT
W przypadku użycia pojedynczego parametru instrukcja INSERT
może zostać przesłana przy użyciu następującej składni:
[ [ INSERT [ INTO ] <table_name> ] VALUES ] ( <expression> [ , ...n ] )
Jeśli określono INSERT <table_name>
, każda wartość określona dla tabeli jest ignorowana.
W przypadku użycia wielu parametrów pierwszy parametr musi być ciągiem w następującym formularzu:
[ VALUES ] ( <expression> [ , ...n ] )
Kolejne parametry muszą mieć postać expression [ , ...n ]
, z wyjątkiem sytuacji, w której określono VALUES
, w tym przypadku musi istnieć końcowy )
po ostatnim wyrażeniu. W tym przypadku <table_name>
w skonstruowanej instrukcji UPDATE
jest jedną określoną lub domyślną dla parametru tabeli.
Nuta
Można przesłać jeden parametr jako nazwany parametr, na przykład @values
. W takim przypadku nie można użyć żadnych innych nazwanych parametrów.