Artigo: 111401 - Última revisão: terça-feira, 20 de Dezembro de 2005 - Revisão: 5.3

Como iterar através de um resultado definido pelo usando o Transact-SQL no SQL Server

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 | Reduzir tudo

Sumário

Este artigo descreve vários métodos que pode utilizar para simular uma lógica de OBTENÇÃO NEXT semelhante cursor num procedimento armazenado, accionador ou comandos de Transact-SQL.

Utilize as instruções de Transact-SQL para iterar através de um conjunto de resultados

Existem três métodos que pode utilizar para iterar através de um conjunto utilizando instruções Transact-SQL de resultados.

Um método é a utilização de tabelas de temp . Com este método cria um "snapshot" da instrução SELECT inicial e utilizado como base para "cursoring." 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 consiste em utilizar a função min para "acompanhar" uma linha de uma tabela de cada vez. Este método identificou novas linhas adicionadas depois o procedimento armazenado de execução, desde que a nova linha tenha um identificador exclusivo maior do que a linha actual está a ser 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
				
Nota : os exemplos 1 e 2 partem do princípio que existe um identificador exclusivo para cada linha na tabela de origem. Em alguns casos, não pode existir nenhum identificador exclusivo. Se for esse o caso, pode modificar o método de tabela temp a utilizar 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 2005 Server Enterprise
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL 2005 Server Workgroup
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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/ )