sp_cursorprepexec (Transact-SQL)

Si applica a:SQL ServerDatabase SQL diAzure Azure Synapse AnalyticsPlatform System (PDW)

Compila un piano per il batch o l'istruzione di cursore inviata, quindi crea e popola il cursore. sp_cursorprepexec combina le funzioni di sp_cursorprepare e sp_cursorexecute. Questa procedura viene richiamata specificando ID = 5 in un pacchetto TDS (Tabular Data Stream).

Convenzioni di sintassi Transact-SQL

Sintassi

sp_cursorprepexec prepared handle OUTPUT , cursor OUTPUT , params , statement , options
    [ , scrollopt [ , ccopt [ , rowcount ] ] ]
    [ , '@parameter_name [ , ...n ]' ]

Argomenti

handle preparato

Identificatore di handle preparato generato da SQL Server. handle preparato è obbligatorio e restituisce int.

cursor

Identificatore del cursore generato da SQL Server. cursor è un parametro obbligatorio che deve essere fornito in tutte le procedure successive che agiscono su questo cursore, ad esempio . sp_cursorfetch

params

Identifica le istruzioni con parametri. La definizione di parametri delle variabili viene sostituita dai marcatori di parametro nell'istruzione . params è un parametro obbligatorio che chiama per un valore di input ntext, nchar o nvarchar .

Nota

Usare una stringa ntext come valore di input quando l'istruzione viene parametrizzata e il valore scrollopt PARAMETERIZED_STMT è ON.

statement

Definisce il set di risultati del cursore. Il parametro di istruzione è obbligatorio e chiama un valore di input ntext, nchar o nvarchar .

Nota

Le regole per specificare il valore dell'istruzione sono uguali a quelle per sp_cursoropen, ad eccezione del fatto che il tipo di dati stringa dell'istruzione deve essere ntext.

options

Parametro facoltativo tramite cui viene restituita una descrizione delle colonne dei set di risultati del cursore. le opzioni richiedono il valore di input int seguente.

Valore Descrizione
0x0001 RETURN_METADATA

scrollopt

Opzione di scorrimento. scrollopt è un parametro facoltativo che richiede uno dei valori di input int seguenti.

Valore Descrizione
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

A causa della possibilità che l'opzione richiesta non sia appropriata per il cursore definito dall'istruzione , questo parametro funge sia da input che da output. In questi casi, SQL Server assegna un tipo appropriato e modifica questo valore.

ccopt

Opzioni del controllo della concorrenza. ccopt è un parametro facoltativo che richiede uno dei valori di input int seguenti.

Valore Descrizione
0x0001 READ_ONLY
0x0002 SCROLL_LOCKS (precedentemente noto come LOCKCC)
0x0004 OPTIMISTIC (noto in precedenza come OPTCC)
0x0008 OPTIMISTIC (precedentemente noto come 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

Come per scrollopt, SQL Server può assegnare un valore diverso da quello richiesto.

Rowcount

Parametro facoltativo che indica il numero di righe del buffer di recupero da usare con AUTO_FETCH. Il valore predefinito è 20 righe. rowcount si comporta in modo diverso quando assegnato come valore di input rispetto a un valore restituito.

Come valore di input Come valore restituito
Quando AUTO_FETCH viene specificato con il conteggio delle righe FAST_FORWARD cursori rappresenta il numero di righe da inserire nel buffer di recupero. Rappresenta il numero di righe nel set di risultati. Quando si specifica il valore di scrollopt AUTO_FETCH, il conteggio delle righe restituisce il numero di righe recuperate nel buffer di recupero.

parameter_name

Definisce uno o più nomi di parametro come definito nell'argomento params . È necessario specificare un parametro per ogni parametro incluso nei parametri. Questo argomento non è obbligatorio quando l'istruzione Transact-SQL o il batch in params non ha parametri definiti.

Valori del codice restituito

Se i parametri restituiscono un valore NULL, l'istruzione non viene parametrizzata.

Esempi

In questo esempio viene illustrato l'uso di sp_cursorprepexec. Esegue una query sulla Person tabella nel AdventureWorks2022 database che restituisce tutti i record in cui il nome è "Katherine".

USE AdventureWorks2022;
GO

DECLARE @prep_handle INT,
    @cursor INT,
    @scrollopt INT = 4104,
    @ccopt INT = 8193,
    @rowcnt INT;

EXEC sp_cursorprepexec
    @prep_handle OUTPUT,
    @cursor OUTPUT,
    N'@fName nvarchar(100)',
    N'SELECT FirstName, LastName FROM Person.Person WHERE FirstName = @fName',
    @scrollopt,
    @ccopt,
    @rowcnt OUTPUT,
    'Katherine';

EXEC sp_cursorfetch @cursor;

Vedi anche