Cursores - exemplo básico de utilização 
Autor: Wesley Leal | Publicado: 2012-10-17T07:26:00-07:00

  Cursores  são estruturas da linguagem  T-SQL que permitem o processamento das linhas retornadas por uma consulta (SELECT),  através de estruturas complexas de programação, como repetições ou&nbsp; comandos condicionais.      O exemplo básico de cursor consiste em uma repetição (loop) onde um mesmo conjunto de comandos é executado para todas as linhas do retorno de uma consulta.    No exemplo abaixo, utiliza-se um cursor para executar a chamada da procedure sp_helptext para cada procedure de um banco de dados. As procedures foram obtidas através de uma consulta na view  ROUTINES do Schema INFORMATION SCHEMA.   DECLARE @schemaName VARCHAR(30)  &nbsp;&nbsp;&nbsp; , @procName VARCHAR(30)  &nbsp;&nbsp;&nbsp; , @fullName VARCHAR(60)    -- Cursor para percorrer os nomes dos objetos   DECLARE cursor_objects CURSOR FOR  &nbsp;&nbsp;&nbsp; SELECT  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ROUTINE_SCHEMA  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , ROUTINE_NAME  &nbsp;&nbsp;&nbsp; FROM  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INFORMATION_SCHEMA.ROUTINES  &nbsp;&nbsp;&nbsp; WHERE  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ROUTINE_TYPE = 'PROCEDURE'    -- Abrindo Cursor para leitura  OPEN cursor_objects    -- Lendo a próxima linha  FETCH NEXT FROM cursor_objects INTO @schemaName, @procName    -- Percorrendo linhas do cursor (enquanto houverem)  WHILE @@FETCH_STATUS = 0  BEGIN    &nbsp;&nbsp;&nbsp; SELECT @fullName = @schemaName &#43; '.' &#43; @procName    &nbsp;&nbsp;&nbsp; EXEC sp_helptext @fullName    &nbsp;&nbsp;&nbsp; -- Lendo a próxima linha  &nbsp;&nbsp;&nbsp; FETCH NEXT FROM cursor_objects INTO @schemaName, @procName  END    -- Fechando Cursor para leitura  CLOSE cursor_objects    -- Desalocando o cursor  DEALLOCATE cursor_objects&nbsp;    Algumas considerações:    Um cursor deve estar sempre associado a uma consulta, especificada ao declarar o cursor.      O comando FETCH popula as variáveis recebidas como parâmetro com os valores da próxima linha da consulta a ser lida. O número de variáveis passadas   como parâmetro deve ser igual ao número de colunas retornadas na consulta associada ao cursor.      A variável global @@FETCH_STATUS retorna o resultado da última operação FETCH executada por um cursor na conexão.  O status 0 significa que o comando FETCH retornou uma linha, qualquer outro resultado significa que não houve linha retornada.    Cursores são estruturas relativamente lentas se comparadas ao desempenho de consultas do banco. O uso descuidado dessa ferramenta pode causar sérios   problemas de performance.  &nbsp;          Confidencialidade: A informação contida nesta mensagem de e-mail, incluindo quaisquer anexos, é confidencial e está reservada apenas à pessoa ou entidade para a qual foi endereçada. Se você não é o destinatário ou a pessoa responsável por encaminhar esta mensagem   ao destinatário, você está, por meio desta, notificado que não deverá rever, retransmitir, imprimir, copiar, usar ou distribuir esta mensagem de e-mail ou quaisquer anexos. Caso você tenha recebido esta mensagem por engano, por favor, contate o remetente imediatamente   e apague esta mensagem de seu computador ou de qualquer outro banco de dados. Muito obrigado.  Confidentiality Notice: The information contained in this email message, including any attachment, is confidential and is intended only for the person or entity to which it is addressed. If you are neither the intended recipient nor the employee or agent responsible   for delivering this message to the intended recipient, you are hereby notified that you may not review, retransmit, convert to hard copy, copy, use or distribute this email message or any attachments to it. If you have received this email in error, please   contact the sender immediately and delete this message from any computer or other data bank. Thank you.