sp_cursoropen (języka Transact-SQL)
Otwiera kursor.sp_cursoropendefiniuje SQL instrukcja związanych z kursor i opcje kursor , a następnie uzupełnia kursor.sp_cursoropenjest odpowiednikiem kombinacji Transact-SQL instrukcji DECLARE_CURSOR i Otwórz.Ta procedura jest wywoływany przez określenie Identyfikatora = 2 w strumień danych tabelarycznych (TDS) pakiet.
Składnia
sp_cursoropen cursor OUTPUT, stmt
[, scrollopt [ OUTPUT ] [ , ccopt [ OUTPUT ]
[ ,rowcount OUTPUT [ ,boundparam] [,...n] ] ] ] ]
Argumenty
cursor
Identyfikator generowany przez serwer kursor SQL .cursorjest dojście wartość dostarczona na wszystkich kolejnych procedur obejmujących kursor, takich jak sp_cursorfetch.cursorjest wymagany parametr z int zwraca wartość.cursorUmożliwia wielu kursory aktywna na połączeniu jednej bazy danych.
stmt
Jest wymagany parametr, który definiuje kursor zestaw wyników.Dowolny prawidłową kwerendą ciąg (składnia i powiązanie) dowolnego typu ciąg (niezależnie od Unicode, wielkość itp.) może służyć jako prawidłowy stmt typu wartości.scrollopt
Przewiń listę opcji.scrolloptto parametr opcjonalny, który wymaga jednego z następujących int wartości wejściowych.Wartość
Opis
0X0001
ZESTAW KLUCZY
0X0002
DYNAMICZNE
0X0004
FORWARD_ONLY
0X0008
STATYCZNE
0x10
FAST_FORWARD
0x1000
PARAMETERIZED_STMT
0x2000
AUTO_FETCH
0x4000
AUTO_CLOSE
0x8000
CHECK_ACCEPTED_TYPES
0x10000
KEYSET_ACCEPTABLE
0x20000
DYNAMIC_ACCEPTABLE
0x40000
FORWARD_ONLY_ACCEPTABLE
0x80000
STATIC_ACCEPTABLE
0x100000
FAST_FORWARD_ACCEPTABLE
Ze względu na możliwość, że żądana wartość nie jest odpowiedni dla kursor zdefiniowane przez stmt, ten parametr służy jako danych wejściowych i wyjściowych.W takich przypadkach SQL Server przypisuje odpowiednią wartość.
ccopt
Opcja sterowania współbieżności.ccoptto parametr opcjonalny, który wymaga jednego z następujących int wartości wejściowych.Wartość
Opis
0X0001
TYLKO_DO_ODCZYTU
0X0002
SCROLL_LOCKS (wcześniej znany jako LOCKCC)
0X0004
OPTYMISTYCZNA (wcześniej znany jako OPTCC)
0X0008
OPTIMISTIC (wcześniej znany jako OPTCCVAL)
0x2000
ALLOW_DIRECT
0x4000
UPDT_IN_PLACE
0x8000
CHECK_ACCEPTED_OPTS
0x10000
READ_ONLY_ACCEPTABLE
0x20000
SCROLL_LOCKS_ACCEPTABLE
0x40000
OPTIMISTIC_ACCEPTABLE
0x80000
OPTIMISITC_ACCEPTABLE
Tak jak w przypadku scrollopt, SQL Server można zastąpić żądania ccopt wartości.
rowcount
Liczba wierszy buforu pobrania do użycia z AUTO_FETCH.Wartość domyślna to 20 wierszy.rowcountzachowuje się inaczej, przypisywany jako wartości wejściowej lub zwracanej wartości.Jako wartości wejściowej
Jako wartość zwracana
Gdy AUTO_FETCH scrollopt określona wartość rowcount reprezentuje liczbę wierszy, aby umieścić w buforze pobierania.
Uwaga:>0 jest prawidłowa wartość AUTO_FETCH jest określony, ale w przeciwnym razie jest ignorowana.Reprezentuje liczbę wierszy w zestaw wyników, z wyjątkiem sytuacji gdy scrollopt określona wartość AUTO_FETCH.
boundparam
Oznacza użycie dodatkowych parametrów.boundparamParametr opcjonalny, który należy określić, jeśli jest scrollopt PARAMETERIZED_STMT wartość jest zestaw na.
Wartości kodów powrotnych
Jeśli błąd nie jest uruchamiany, sp_cursoropen zwraca jedną z następujących wartości.
0
Procedura została wykonana pomyślnie.0X0001
Wystąpił błąd podczas wykonywania (drobnego błędu, nie wystarczająco poważny podnieść błąd w operacji).0X0002
Operacja asynchroniczna jest w toku.0X0002
Operacja pobierania jest w procesie.A
Tego kursor został dealokowane przez SQL Server i jest niedostępny.
Powstaje błąd zwracanych wartości może być niespójny, a nie może zagwarantować dokładności.
Gdy rowcount parametr jest określony jako wartość zwracana występuje następujący zestaw wyników .
-1
Zwracane, jeśli liczba wierszy jest nieznany lub nie ma zastosowania.-n
Zwracane jest asynchroniczne zapełnianie .Reprezentuje liczbę wierszy, które zostały wprowadzone do pobrania buforu podczas scrollopt określona wartość AUTO_FETCH.
Jeśli serwer RPC jest używany, wartości zwracane są następujące:
0
Procedura zakończyła się sukcesem.1
Procedura nie powiodło się.2
Zestaw kluczy kursor jest generowany asynchronicznie.16
Przewijanie kursor został automatycznie zamknięty.
Ostrzeżenie
Jeśli sp_cursoropen procedura jest wykonywana pomyślnie, parametrów zwrotnych RPC i zestaw wyników informacji o formaciekolumna TDS(0xa0 & 0xa1 wiadomości) są wysyłane.W razie niepowodzenia, jeden lub więcej komunikatów o błędzie TDS są wysyłane.W każdym przypadekzostaną zwrócone żadne dane wierszy i Sporządzono liczbę wiadomości będzie równa zero.Jeśli używasz wersja programu SQL Server starsze niż wersja 7.0, 0xa0, 0xa1 (standard dla instrukcji SELECT) są zwracane wraz z 0xa5 i 0xa4 token strumieni.Jeśli używasz SQL Server 7.0, 0x81 jest zwracana (standard dla instrukcji SELECT) wraz z 0xa5 i 0xa4 token strumieni.
Uwagi
stmt parametru
Jeśli stmt określa wykonywanie procedura składowanaparametry wejściowe albo może być zdefiniowana jako stałe w ramach stmt ciąglub określone jako boundparam argumentów.Zmienne zadeklarowanej mogą być przekazywane jako parametry związane w ten sposób.
Dopuszczalne zawartości stmt parametru uzależnione, czy nie ccopt ALLOW_DIRECT zwraca wartość zostały połączone przez lub do pozostałej części ccopt wartości, to znaczy:
Jeśli ALLOW_DIRECT nie jest określony, albo Transact-SQL ZAZNACZENIE lub wykonanie instrukcja wywoływania dla procedura składowana zawierającą pojedynczą instrukcja SELECT musi być używany.Ponadto instrukcja SELECT musi kwalifikować się jako kursor; oznacza to, że nie może zawierać słowa kluczowe SELECT INTO, aby PRZEGLĄDAĆ lub obliczeń.
Jeśli zostanie określony ALLOW_DIRECT, może to spowodować w jednym lub więcej Transact-SQL instrukcji, łącznie z tymi, z kolei wykonać innych procedur przechowywanych z wielu instrukcji.Wybierz inne niż instrukcje lub wszelkie SELECT instrukcja , która zawiera słowa kluczowe SWYBIERA do, aby PRZEGLĄDAĆ lub po prostu zostanie wykonana i nie powoduje powstania kursor.To samo dotyczy wszelkich SELECT instrukcja zawartych w partia wielokrotne instrukcje.W przypadkach gdy instrukcja SELECT zawiera klauzul, które dotyczą tylko kursory klauzule te są ignorowane.Dla wystąpienie, gdy wartość ccopt jest 0x2002, jest to żądanie:
Blokuje kursor z przewijania, jeśli tylko pojedynczy wybierz instrukcja , że kwalifikuje się jako kursorlub
Wykonanie bezpośrednie instrukcja , jeśli wielokrotne instrukcje, pojedynczy — wybierz instrukcjalub SELECT instrukcja , która nie kwalifikuje się kursor.
Parametr scrollopt
Pierwsze pięć scrollopt wartości (KEYSEY, DYNAMICZNY, FORWARD_ONLY, statyczny i FAST_FORWARD) są wzajemnie wyłączności.
PARAMETERIZED_STMT i CHECK_ACCEPTED_TYPES mogą być połączone przez ani do żadnej z pierwszych pięć wartości.
AUTO_FETCH i AUTO_CLOSE mogą być połączone przez lub FAST_FORWARD.
Jeśli CHECK_ACCEPTED_TYPES jest włączone, co najmniej jeden z ostatnich pięciu lat scrollopt wartości (KEYSET_ACCEPTABLE, DYNAMIC_ACCEPTABLE, FORWARD_ONLY_ACCEPTABLE, STATIC_ACCEPTABLE lub FAST_FORWARD_ACCEPTABLE) musi być również na.
Kursory STATYCZNE są zawsze otwierane jako TYLKO_DO_ODCZYTU.Oznacza to, że podstawowej tabela nie można zaktualizować za pomocą tego kursor.
Parametr ccopt
Pierwsze cztery ccopt wartości (TYLKO_DO_ODCZYTU, SCROLL_LOCKS i obie wartości OPTYMISTYCZNEGO) są wzajemnie wyłączności.
Ostrzeżenie
Wybranie jednej z czterech pierwszych ccopt wartości decyduje czy kursor jest tylko do odczytu, lub jeżeli wykorzystywane są metody blokowania lub optymistycznego zapobieganie utracone aktualizacje.Jeśli ccopt wartość nie zostanie określona, wartością domyślną jest OPTIMISTIC.
ALLOW_DIRECT i CHECK_ACCEPTED_TYPES mogą być połączone przez ani do żadnej z pierwszych czterech wartości.
UPDT_IN_PLACE mogą być połączone przez lub TYLKO_DO_ODCZYTU, SCROLL_LOCKS lub obie wartości OPTYMISTYCZNE.
Jeśli CHECK_ACCEPTED_TYPES jest włączone, co najmniej jeden z czterech ostatnich ccopt wartości (READ_ONLY_ACCEPTABLE, SCROLL_LOCKS_ACCEPTABLE i albo wartości OPTIMISTIC_ACCEPTABLE) także muszą być dalej.
Pozycjonowane aktualizacji i usuwania mogą być wykonywane wyłącznie w buforze pobierania i tylko wtedy, gdy ccopt wartość jest równa SCROLL_LOCKS lub OPTIMISTIC.Jeśli SCROLL_LOCKS jest równa określonej wartości, operacja jest gwarantowane powiodła się.Jeśli OPTIMISTIC jest równa określonej wartości, operacja zakończy się niepowodzeniem, jeśli wiersz został zmieniony od czasu ostatniego została pobrana.
Przyczyny tego błędu jest, że OPTIMISTIC jest równa określonej wartości, optymistycznego waluty kontrolowanie funkcja jest przeprowadzana przez porównywanie sygnatury czasowe lub suma kontrolna wartości ustalone przez SQL Server.Jeśli dowolne z tych wierszy nie są zgodne, operacja nie powiedzie się.
Określanie UPDT_IN_PLACE jako wartość zwracana regulują następujące wyniki:
Jeśli nie zestaw podczas wykonywania aktualizacja pozycjonowana na tabela z indeks unikatowy, kursor usuwa wiersz z jego pracy tabela i wstawia go na końcu każdej kolumny klucz , używanych przez kursor, zmieniając kolumny te.
Jeśli zestaw na kursor po prostu zaktualizuje kolumn klucz w pracy tabelaoryginalny wiersz.
Parametr bound_param
Nazwa parametru powinny być paramdef , gdy PARAMETERIZED_STMT jest określona zgodnie z komunikatem o błędzie w kodzie.Gdy PARAMETERIZED_STMT nie jest określony, nazwa nie zostanie określona w komunikacie o błędzie.
Uwagi dotyczące RPC
Flaga wejścia RPC RETURN_METADATA można zestaw na 0x0001 żądania listy wybierz kursor metadane będą zwracane w strumieniu TDS .
Przykłady
Parametr bound_param
Wszystkie parametry po piątym są przekazywane razem plan instrukcja jako parametry wejściowe.Pierwszy taki parametr musi być ciąg w postaci:
{ Typ danych nazwa zmiennej lokalnej} [, …n]
Kolejne parametry są używane do przekazania wartości ma być zastępowana local variable name w instrukcja.
Zobacz także