ID do artigo: 111401 - Última revisão: terça-feira, 20 de dezembro de 2005 - Revisão: 5.3

Como iterar por meio de um conjunto usando o Transact-SQL no SQL Server de resultados

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sumário

Este artigo descreve vários métodos que você pode usar para simular uma lógica de Avançar FETCH semelhante do cursor em um procedimento armazenado, disparador ou em lotes do Transact-SQL.

Usar instruções Transact-SQL para iterar um conjunto de resultados

Há três métodos que você pode usar para iterar em um conjunto usando instruções Transact-SQL de resultados.

Um método é o uso de tabelas de temp . Com esse método, você cria um "instantâneo" da instrução SELECT inicial e o utiliza como base para "cursor". Por exemplo:
/********** example 1 **********/ 

declare @au_id char( 11 )

set rowcount 0
select * into #mytemp from authors

set rowcount 1

select @au_id = au_id from #mytemp

while @@rowcount <> 0
begin
    set rowcount 0
    select * from #mytemp where au_id = @au_id
    delete #mytemp where au_id = @au_id

    set rowcount 1
    select @au_id = au_id from #mytemp<BR/>
end
set rowcount 0
				

Um segundo método é usar a função mínimo "percorrer" uma linha de uma tabela por vez. Esse método captura novas linhas que foram adicionadas após o procedimento armazenado iniciará a execução, desde que a nova linha possui um identificador exclusivo maior do que a linha atual que está sendo processada na consulta. Por exemplo:
/********** example 2 **********/ 

declare @au_id char( 11 )

select @au_id = min( au_id ) from authors

while @au_id is not null
begin
    select * from authors where au_id = @au_id
    select @au_id = min( au_id ) from authors where au_id > @au_id
end
				
Observação : os exemplo 1 e 2 assumem que existe um identificador exclusivo para cada linha na tabela de origem. Em alguns casos, não pode haver nenhum identificador exclusivo. Se esse for o caso, você pode modificar o método de tabela temp para usar uma coluna de chave recém-criada. Por exemplo:
/********** example 3 **********/ 

set rowcount 0
select NULL mykey, * into #mytemp from authors

set rowcount 1
update #mytemp set mykey = 1

while @@rowcount > 0
begin
    set rowcount 0
    select * from #mytemp where mykey = 1
    delete #mytemp where mykey = 1
    set rowcount 1
    update #mytemp set mykey = 1
end
set rowcount 0
				



A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 4.21a Standard Edition
  • Microsoft SQL Server 6.0 Standard Edition
  • Microsoft SQL Server 6.5 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Palavras-chave: 
kbmt kbhowtomaster KB111401 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 111401  (http://support.microsoft.com/kb/111401/en-us/ )