Udostępnij za pośrednictwem


sp_cursorprepare (Transact-SQL)

Dotyczy:programu SQL Server

Kompiluje instrukcję kursora lub wsadową do planu wykonywania, ale nie tworzy kursora. Skompilowana instrukcja może być później używana przez sp_cursorexecute. Ta procedura, w połączeniu z sp_cursorexecute, ma tę samą funkcję co sp_cursoropen, ale jest podzielona na dwie fazy. sp_cursorprepare jest wywoływana przez określenie ID = 3 w pakiecie strumienia danych tabelarycznych (TDS).

Transact-SQL konwencje składni

Składnia

sp_cursorprepare prepared_handle OUTPUT , params , stmt , options
    [ , scrollopt [ , ccopt ] ]
[ ; ]

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.

prepared_handle

Wygenerowany identyfikator handle programu SQL Server, który zwraca wartość int.

prepared_handle następnie jest dostarczany do procedury sp_cursorexecute w celu otwarcia kursora. Po utworzeniu dojścia istnieje do momentu wylogowania lub jawnego usunięcia go za pomocą procedury sp_cursorunprepare.

params

Identyfikuje sparametryzowane instrukcje. Parametry definicji zmiennych są zastępowane znacznikami parametrów w instrukcji . parametrów jest wymaganym parametrem wywołującym ntext, ncharlub nvarchar wartość wejściową. Wprowadź wartość NULL, jeśli instrukcja nie jest sparametryzowana.

Użyj ciągu ntext jako wartości wejściowej, gdy stmt jest sparametryzowana, a wartość przewijania PARAMETERIZED_STMT jest włączona.

stmt

Definiuje zestaw wyników kursora. Parametr stmt jest wymagany i wywołuje ntext, **nchar lub nvarchar wartości wejściowej.

Reguły określania wartości stmt są takie same jak sp_cursoropen, z wyjątkiem, że typ danych ciągu stmt musi być ntext.

opcje

Zwraca opis kolumn zestawu wyników kursora. Parametr opcji jest int z wartością domyślną NULL. W przypadku ustawienia wartości 0x0001oznacza to, że RETURN_METADATA.

przewijania

Opcja przewijania. Parametr scrollopt jest opcjonalnym parametrem, który wymaga jednej z następujących wartości wejściowych int.

Wartość Opis
0x0001 KEYSET
0x0002 DYNAMIC
0x0004 FORWARD_ONLY
0x0008 STATIC
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

Ponieważ żądana wartość może nie być odpowiednia dla kursora zdefiniowanego przez stmt, ten parametr służy zarówno jako dane wejściowe, jak i wyjściowe. W takich przypadkach program SQL Server przypisuje odpowiednią wartość.

Opcja kontroli współbieżności. jest opcjonalnym parametrem, który wymaga jednej z następujących wartości wejściowych int.

Wartość Opis
0x0001 READ_ONLY
0x0002 SCROLL_LOCKS (wcześniej znany jako LOCKCC)
0x0004 OPTIMISTIC (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 OPTIMISTIC_ACCEPTABLE

Podobnie jak w przypadku przewijaniaprogram SQL Server może przypisać inną wartość niż żądana.

Uwagi

Parametr stanu RPC jest jedną z następujących wartości:

Wartość Opis
0 Sukces
0x0001 Niepowodzenie
1FF6 Nie można zwrócić metadanych.

Uwaga: Przyczyną jest to, że instrukcja nie generuje zestawu wyników; na przykład jest to instrukcja INSERT lub DDL.

Przykłady

Poniższy kod to przykład użycia sp_cursorprepare i sp_cursorexecute:

DECLARE @handle INT, @p5 INT, @p6 INT;

EXEC sp_cursorprepare @handle OUTPUT,
    N'@dbid int',
    N'select * from sys.databases where database_id < @dbid',
    1,
    @p5 OUTPUT,
    @p6 OUTPUT;

DECLARE @p1 INT
SET @P1 = @handle;

DECLARE @p2 INT;
DECLARE @p3 INT;
DECLARE @p4 INT;

SET @P6 = 4;

EXEC sp_cursorexecute @p1,
    @p2 OUTPUT,
    @p3 OUTPUT,
    @p4 OUTPUT,
    @p5 OUTPUT,
    @p6;

EXEC sp_cursorfetch @P2;
EXEC sp_cursorunprepare @handle;
EXEC sp_cursorclose @p2;

Gdy stmt jest sparametryzowana, a wartość PARAMETERIZED_STMT przewijaniajest ON, format ciągu ma następującą postać:

<parameter_name> <data_type> [ ,... n ]