Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Solicita atualizações posicionadas. Este procedimento executa operações em uma ou mais linhas dentro do buffer de busca de um cursor.
sp_cursor
é invocado especificando ID = 1
em um pacote de fluxo de dados tabular (TDS).
Transact-SQL convenções de sintaxe
Sintaxe
sp_cursor cursor , optype , rownum , table
[ , value [ ...n ] ]
[ ; ]
Argumentos
Importante
Os argumentos para procedimentos armazenados estendidos devem ser inseridos na ordem específica, conforme descrito na seção de sintaxe. Se os parâmetros forem inseridos fora de ordem, ocorrerá uma mensagem de erro.
cursor
A alça do cursor. O cursor parâmetro é inte não pode ser NULL
. Esse parâmetro é o valor handle
gerado pelo Mecanismo de Banco de Dados e retornado pelo procedimento sp_cursoropen
.
optype
Um parâmetro obrigatório que designa a operação executada pelo cursor. O parâmetro optype requer um dos seguintes valores.
Valor | Designação | Descrição |
---|---|---|
0X0001 |
UPDATE |
É usado para atualizar uma ou mais linhas no buffer de busca. As linhas especificadas em rownum são reacessadas e atualizadas. |
0x0002 |
DELETE |
É usado para excluir uma ou mais linhas no buffer de busca. As linhas especificadas em de número de linha são reacessadas e excluídas. |
0X0004 |
INSERT |
Insere dados sem criar uma instrução INSERT . |
0X0008 |
REFRESH |
É usado para recarregar o buffer de tabelas subjacentes e pode ser usado para atualizar a linha se uma atualização ou exclusão falhar devido ao controle de simultaneidade otimista ou após um UPDATE . |
0X10 |
LOCK |
Faz com que um bloqueio de atualização (U) seja adquirido na página que contém a linha especificada. Este bloqueio é compatível com bloqueios partilhados (S), mas não com bloqueios exclusivos (X) ou outros bloqueios de atualização. Pode ser usado para implementar o bloqueio de curto prazo. |
0X20 |
SETPOSITION |
É usado apenas quando o programa vai emitir uma declaração DELETE ou UPDATE subsequente. |
0X40 |
ABSOLUTE |
Só pode ser utilizado com UPDATE ou DELETE .
ABSOLUTE é usado apenas com KEYSET cursores (é ignorado para DYNAMIC cursores) e STATIC cursores não podem ser atualizados.Nota: Se ABSOLUTE for especificado em uma linha no conjunto de chaves que não foi buscada, a operação poderá falhar na verificação de simultaneidade e o resultado do retorno não poderá ser garantido. |
rownum
Especifica em qual das linhas do buffer de busca o cursor opera, atualiza ou exclui. Este parâmetro não afeta o ponto de partida de nenhuma operação de busca RELATIVE
, NEXT
ou PREVIOUS
, nem quaisquer atualizações ou exclusões realizadas usando sp_cursor
.
rownum é um parâmetro obrigatório que exige um int valor de entrada.
1
Significa a primeira linha no buffer de busca.
2, 3, 4, ...n
Significa a segunda, terceira e quarta linhas, e assim por diante.
0
Significa todas as linhas no buffer de busca.
Este parâmetro só é válido para uso com UPDATE
, DELETE
, REFRESH
ou LOCK
optype valores.
tabela
Nome da tabela que identifica a tabela à qual optype se aplica quando a definição do cursor envolve uma junção ou nomes de coluna ambíguos são retornados pelo parâmetro valor. Se nenhuma tabela específica for designada, o padrão será a primeira tabela na cláusula FROM
. A tabela parâmetro é opcional e requer um valor de entrada de cadeia de caracteres. A cadeia de caracteres pode ser especificada como qualquer caractere ou tipo de dados Unicode, ou um nome de tabela de várias partes.
valor
Usado para inserir ou atualizar valores. O valor parâmetro string só é usado com UPDATE
e INSERT
optype valores. A cadeia de caracteres pode ser especificada como qualquer caractere ou tipo de dados Unicode.
Os nomes dos parâmetros para valor podem ser atribuídos pelo usuário.
Valores de código de retorno
0
(sucesso) ou 1
(fracasso).
Comentários
O parâmetro optype
Exceto para as combinações de SETPOSITION
com UPDATE
, DELETE
, REFRESH
ou LOCK
; ou ABSOLUTE
com UPDATE
ou DELETE
, os optype valores são mutuamente exclusivos.
A cláusula SET
do valor UPDATE
é construída a partir do parâmetro value.
Um benefício de usar o valor INSERT <optype>
é que você pode evitar a conversão de dados sem caracteres em formato de caractere para inserções. Os valores são especificados da mesma forma que UPDATE
. Se alguma coluna necessária não for incluída, o INSERT
falhará.
- O valor de
SETPOSITION
não afeta o ponto de partida de nenhuma operação de busca deRELATIVE
,NEXT
ouPREVIOUS
, nem as atualizações ou exclusões realizadas usando a interfacesp_cursor
. Qualquer número que não especifique uma linha no buffer de busca, resulta na posição sendo definida como1
, sem que nenhum erro seja retornado. Uma vez queSETPOSITION
é executado, a posição permanece em vigor até a próxima operação desp_cursorfetch
, operação deFETCH
T-SQL ou operaçãosp_cursor
SETPOSITION
através do mesmo cursor. Uma operação desp_cursorfetch
subsequente define a posição do cursor para a primeira linha no novo buffer de busca, enquanto outras chamadas de cursor não afetam o valor da posição.SETPOSITION
pode ser vinculado por uma cláusulaOR
comREFRESH
,UPDATE
,DELETE
ouLOCK
para definir o valor da posição para a última linha modificada.
Se uma linha no buffer de busca não for especificada por meio do parâmetro rownum, a posição será definida como 1, sem que nenhum erro seja retornado. Uma vez que a posição é definida, ela permanece em vigor até que a próxima operação sp_cursorfetch
, operação FETCH
T-SQL ou operação sp_cursor
SETPOSITION
seja executada no mesmo cursor.
SETPOSITION
pode ser vinculado por uma cláusula OR
com REFRESH
, UPDATE
, DELETE
ou LOCK
para definir a posição do cursor para a última linha modificada.
O parâmetro rownum
Se especificado, o parâmetro rownum pode ser interpretado como o número da linha dentro do conjunto de chaves em vez do número da linha dentro do buffer de busca. O usuário é responsável por garantir que o controle de simultaneidade seja mantido. Isso significa que, para SCROLL_LOCKS
cursores, você deve manter de forma independente um bloqueio na linha determinada (o que pode ser feito por meio de uma transação). Para OPTIMISTIC
cursores, você deve ter buscado anteriormente a linha para executar essa operação.
A tabela parâmetro
Se o valor optype for UPDATE
ou INSERT
e uma instrução completa de atualização ou inserção for enviada como o parâmetro valor, o valor especificado para da tabela será ignorado.
Observação
Referente aos modos de exibição, apenas uma tabela que participa do modo de exibição pode ser modificada. O valor nomes de coluna de parâmetro deve refletir os nomes de coluna na exibição, mas o nome da tabela pode ser o da tabela base subjacente (caso em que sp_cursor
substitui o nome da exibição).
O valor parâmetro
Há duas alternativas às regras para usar valor como indicado anteriormente na seção Argumentos:
Você pode usar um nome que
@
seja anexado ao nome da coluna na lista de seleção para qualquer valor de nomeado parâmetros. Uma vantagem dessa alternativa é que a conversão de dados pode não ser necessária.Use um parâmetro para enviar uma instrução completa
UPDATE
ouINSERT
ou use vários parâmetros para enviar partes de uma instruçãoUPDATE
ouINSERT
, que o Mecanismo de Banco de Dados compila em uma instrução completa. Exemplos podem ser encontrados na seção Exemplos mais adiante neste artigo.
Exemplos
Usos de parâmetros de valor alternativos
Para UPDATE
Quando um único parâmetro é usado, uma instrução UPDATE
pode ser enviada usando a seguinte sintaxe:
[ [ UPDATE <table_name> ] SET ] { <column name> = expression } [ , ...n ]
Se UPDATE <table_name>
for especificado, qualquer valor especificado para a tabela parâmetro será ignorado.
Quando vários parâmetros são usados, o primeiro parâmetro deve ser uma cadeia de caracteres na seguinte forma:
[ SET ] <column name> = expression [ , ...n ]
Os parâmetros subsequentes devem assumir a forma de:
<column name> = expression [ , ...n ]
Nesse caso, o <table_name>
na instrução de atualização construída é aquele especificado ou padronizado pelo parâmetro tabela.
Para INSERT
Quando um único parâmetro é usado, uma instrução INSERT
pode ser enviada usando a seguinte sintaxe:
[ [ INSERT [ INTO ] <table_name> ] VALUES ] ( <expression> [ , ...n ] )
Se INSERT <table_name>
for especificado, qualquer valor especificado para a tabela parâmetro será ignorado.
Quando vários parâmetros são usados, o primeiro parâmetro deve ser uma cadeia de caracteres na seguinte forma:
[ VALUES ] ( <expression> [ , ...n ] )
Os parâmetros subsequentes devem assumir a forma de expression [ , ...n ]
, exceto nos casos em que VALUES
foi especificado, caso em que deve haver um )
à direita após a última expressão. Nesse caso, a <table_name>
na instrução UPDATE
construída é a especificada ou padronizada pelo parâmetro table.
Observação
É possível enviar um parâmetro como um parâmetro nomeado, por exemplo, @values
. Neste caso, nenhum outro parâmetro nomeado pode ser usado.