STORE PROCEDURE - CRIAR LISTA DE REGISTROS

FFCOUTO 13/02/2012 16:25:48
#394602
Boa tarde, pessoal

Estou precisando de ajuda com uma StoreProcedure. O cenário é o seguinte:

Tenho uma Job agendada no Servidor SQL 2000 para rodar todos os dias a 1h da manhã. Até aí está tudo ok. O problema que essa Job tem que recuperar uma lista de itens e enviar por e-mail para alguns usuários previamente selecionados.

Aí é onde está a maior dificuldade, pois nunca trabalhei com SP. Vou fazer um SELECT numa tabela e recuperar uma lista de registros. Daí tenho que inserir esta lista no corpo de um email. Como fazer isso numa SP?

[ô]
Consulta a ser realizada
sSQL = [Ô]SELECT campo FROM tabela WHERE condicao;[Ô]

Set r = New ADBDB.Recordset
r.Open sSQL, cnx

[ô]Transformar a lista em linhas de um arquivo html para enviar por email
Do While Not r.EOF
var_aux = var_aux & r([Ô]campo[Ô]) & [Ô]<br />[Ô] [ô]Linhas a serem geradas
r.MoveNext
Loop

[ô]Saída do HTML
fileHTML = var_Header & var_Body & var_aux & var_Footer

Exec sp_EnviarEmail [ô]mail-usuario@dominio.com[ô], [ô]Aviso de agendamento[ô], fileHTML


Agradeço a quem puder ajudar.

FFCOUTO 14/02/2012 16:40:43
#394720
Bem depois de muito quebrar a cabeça consegui a solução


CREATE PROCEDURE teste (@lista VARCHAR(8000) OUTPUT) AS

DECLARE @varLista VARCHAR(8000);
DECLARE @varNome VARCHAR(100);

BEGIN
-- INICIALIZA AS VARIÁVEIS
SET @varLista = [ô][ô];
SELECT @varNome = NULL;

-- MONTA O CURSOR DE REGISTROS DA TABELA
DECLARE cCURSOR1 CURSOR LOCAL FOR
SELECT TOP 20 nome FROM clientes ORDER BY nome;

-- ABRE O CURSOR
OPEN cCURSOR1;

-- BUSCA AS INFORMAÇÕES DO PRIMEIRO REGISTRO
FETCH NEXT FROM cCURSOR1 INTO @varNome;

-- LOOP NOS REGISTROS SELECIONADOS
WHILE (@@FETCH_STATUS = 0)
BEGIN
-- COLOQUE AQUI OS COMANDOS SQL DA SUA PROCEDURE
SET @varLista = @varLista + @varNome + CHAR(13) + CHAR(10);

-- BUSCA AS INFORMAÇÕES DO PRÓXIMO REGISTRO
FETCH NEXT FROM cCURSOR1 INTO @varNome;
END
-- (FIM DO LOOP NOS REGISTROS SELECIONADOS) ///

-- FECHA E DESTROI O CURSOR
CLOSE cCURSOR1;
DEALLOCATE cCURSOR1;

SELECT @lista = @varLista;
RETURN
END



Espero poder ajudar com esta solução
Tópico encerrado , respostas não são mais permitidas