Udostępnij za pośrednictwem


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, 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.

  • 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, 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ść SETPOSITION nie ma wpływu na punkt początkowy żadnych RELATIVE, NEXTlub PREVIOUS operacji pobierania, ani nie ma żadnych aktualizacji ani usuwania wykonywanych przy użyciu interfejsu sp_cursor. Dowolna liczba, która nie określa wiersza w buforze pobierania, powoduje ustawienie pozycji na 1, bez zwracania błędu. Po wykonaniu SETPOSITION pozycja pozostaje w mocy aż do następnej operacji sp_cursorfetch, operacji FETCH języka T-SQL lub sp_cursorSETPOSITION operacji przez ten sam kursor. Kolejna operacja sp_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ą klauzuli OR z REFRESH, UPDATE, DELETElub LOCK, 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:

  1. 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.

  2. Użyj parametru , aby przesłać kompletną instrukcję UPDATE lub INSERT albo użyć wielu parametrów do przesyłania części instrukcji UPDATE lub INSERT, 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.