Usuário com melhor resposta
Problema ao colocar select para enviar resultado por e-mail

Pergunta
-
Boa tarde.
Estou com um problema para enviar o resultado de uma select port e-mail no sql server 2012. Esta me apresentado a seguinte mensagem.
"Mensagem 116, Nível 16, Estado 1, Linha 22
Somente uma expressão pode ser especificada na lista de seleção quando a subconsulta não é introduzida com EXISTS."Segue abaixo minha query
DECLARE @p_body as nvarchar(max), @p_subject as nvarchar(max)
DECLARE @p_recipients as nvarchar(max), @p_profile_name as nvarchar(max)
SET @p_profile_name = N'Estoque Minimo'
SET @p_recipients = N'teste@dominio.com.br'
SET @p_subject = N'Teste de envio'
SET @p_body = '<b>Segue em anexo o Relatório de Produtos abaixo doestqoeu mínimo.</b>'
+ '<table border=1 width="100%"><tr><th colspan="8" bgcolor="darkblue">'
+ '<h3>Relatorio de Estoque para Compras </h3></th></tr>' --titulo da tabela
+ '<tr bgcolor="lightblue"><th>Produto<th>Saldo<th><th>Saldo em Compras<th><th><th>Estque Minimo<th></tr>' --colunas do email
+ ( SELECT DISTINCT
SB1.B1_DESC AS PRODUTO,
SUM(SB8.B8_SALDO) AS SALDO,
(SC7.C7_QUANT - SC7.C7_QUJE) AS [SALDO DE COMPRAS],
SC7.C7_NUM AS PEDIDO,
SB1.B1_EMIN AS [SALDO MINIMO EM ESTOQUE]
FROM DADOSADV12.dbo.SB1010 AS SB1
INNER JOIN DADOSADV12.dbo.SB8010 AS SB8 WITH(NOLOCK) ON SB8.B8_PRODUTO = SB1.B1_COD
INNER JOIN DADOSADV12.dbo.SC7010 AS SC7 WITH(NOLOCK) ON SC7.C7_PRODUTO = SB1.B1_COD
WHERE SB1.B1_COD = '000070'
AND SB8.B8_LOCAL IN ('01', '95')
AND SC7.C7_ENCER <> 'E'
AND SB1.D_E_L_E_T_ = ''
AND SB8.D_E_L_E_T_ = ''
AND SC7.D_E_L_E_T_ = ''
GROUP BY SB1.B1_DESC, SB1.B1_EMIN, SC7.C7_QUANT, SC7.C7_QUJE, SC7.C7_NUM)
EXEC msdb.dbo.sp_send_dbmail
@profile_name = @p_profile_name,
@recipients = @p_recipients,
@body = @p_body,
@body_format = 'HTML',
@subject = @p_subject
JUNIOR GUERREIRO T.I
Respostas
-
Deleted
- Marcado como Resposta Junior Guerreiro quarta-feira, 4 de julho de 2018 22:00
Todas as Respostas
-
Boa tarde Junior,
Acredito que o problema seja que a sua variável @p-body está recebendo o resultado de um SELECT que retorna vários campos. Nesse caso, ou você precisa concatenar o resultado do SELECT em um único campo, ou obter esses valores com variáveis e atribuir depois em @p-body.
Outra coisa, aparentemente seu SELECT retorna uma única linha pois é filtrado no WHERE o campo SB1.B1_COD. Está correto. Certifique-se de que sempre retorne apenas uma linha nesse SELECT, senão você vai obter uma mensagem dizendo que a subquery retornou mais de uma valor.
Abaixo um exemplo de código concatenando as colunas do select em uma única coluna para atribuir em @p-body. Certamente você terá que mudar isso e colocar as tags <tr> e <td> para ficar de acordo com a sua tabela.
DECLARE @p_body as nvarchar(max), @p_subject as nvarchar(max) DECLARE @p_recipients as nvarchar(max), @p_profile_name as nvarchar(max) SET @p_profile_name = N'Estoque Minimo' SET @p_recipients = N'teste@dominio.com.br' SET @p_subject = N'Teste de envio' SET @p_body = '<b>Segue em anexo o Relatório de Produtos abaixo doestqoeu mínimo.</b>' + '<table border=1 width="100%"><tr><th colspan="8" bgcolor="darkblue">' + '<h3>Relatorio de Estoque para Compras </h3></th></tr>' --titulo da tabela + '<tr bgcolor="lightblue"><th>Produto<th>Saldo<th><th>Saldo em Compras<th><th><th>Estque Minimo<th></tr>' --colunas do email + (SELECT DISTINCT SB1.B1_DESC + ', ' -- Campos separados por vírgula SUM(SB8.B8_SALDO) + ', ' (SC7.C7_QUANT - SC7.C7_QUJE) + ', ' SC7.C7_NUM + ', ' SB1.B1_EMIN FROM DADOSADV12.dbo.SB1010 AS SB1 INNER JOIN DADOSADV12.dbo.SB8010 AS SB8 WITH(NOLOCK) ON SB8.B8_PRODUTO = SB1.B1_COD INNER JOIN DADOSADV12.dbo.SC7010 AS SC7 WITH(NOLOCK) ON SC7.C7_PRODUTO = SB1.B1_COD WHERE SB1.B1_COD = '000070' AND SB8.B8_LOCAL IN ('01', '95') AND SC7.C7_ENCER <> 'E' AND SB1.D_E_L_E_T_ = '' AND SB8.D_E_L_E_T_ = '' AND SC7.D_E_L_E_T_ = '' GROUP BY SB1.B1_DESC, SB1.B1_EMIN, SC7.C7_QUANT, SC7.C7_QUJE, SC7.C7_NUM) EXEC msdb.dbo.sp_send_dbmail @profile_name = @p_profile_name, @recipients = @p_recipients, @body = @p_body, @body_format = 'HTML', @subject = @p_subject
Espero ter ajudado
-
-
-
Deleted
- Marcado como Resposta Junior Guerreiro quarta-feira, 4 de julho de 2018 22:00
-