Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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, NEXTlub 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.
1Oznacza pierwszy wiersz w buforze pobierania.
2, 3, 4, ...nOznacza drugi, trzeci i czwarty wiersz itd.
0Oznacza wszystkie wiersze w buforze pobierania.
Ten parametr jest prawidłowy tylko do użycia z wartościamiUPDATE, DELETE, REFRESHlub 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 INSERToptype. 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, REFRESHlub 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ść
SETPOSITIONnie ma wpływu na punkt początkowy żadnychRELATIVE,NEXTlubPREVIOUSoperacji 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 wykonaniuSETPOSITIONpozycja pozostaje w mocy aż do następnej operacjisp_cursorfetch, operacjiFETCHjęzyka T-SQL lubsp_cursorSETPOSITIONoperacji przez ten sam kursor. Kolejna operacjasp_cursorfetchustawia położenie kursora na pierwszy wiersz w nowym buforze pobierania, podczas gdy inne wywołania kursora nie wpływają na wartość pozycji.SETPOSITIONmożna połączyć za pomocą klauzuliORzREFRESH,UPDATE,DELETElubLOCK, 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_cursorSETPOSITION operacji na tym samym kursorze.
SETPOSITION można połączyć za pomocą klauzuli OR z REFRESH, UPDATE, DELETElub 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ę
UPDATElubINSERTalbo użyć wielu parametrów do przesyłania części instrukcjiUPDATElubINSERT, 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.