хранимая процедура для отправки электронной почты, используется для работы, но не работает, хотя она не возвращает ошибку - PullRequest
0 голосов
/ 06 ноября 2019

Итак, я получил эту хранимую процедуру. Я использую SQL Server 2016. Эта процедура делает следующее, она проверяет достоверность определенных файлов (в зависимости от времени мы устанавливаем дату окончания некоторых файлов). когда эта достоверность достигнута, эта процедура должна отправить электронное письмо на два адреса, чтобы мы знали, какой файл достиг своего конца. если я запускаю select, изолированное, оно работает как шарм. весь код не возвращает ошибок, но не отправляет электронные письма. есть мысли о том, что может быть не так?

USE [MASS]
GO
/****** Object:  StoredProcedure [dbo].[DossierEmailSend]    Script Date: 06/11/2019 10:00:44 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[DossierEmailSend]
AS
 --Create a holding table for the dossiers that met the criteria

DECLARE @dossiers TABLE (col1 varchar(100), col2 varchar(100), col3 varchar(100), col4 varchar(100));

 --Insert the dossiers that met the criteria

INSERT INTO @dossiers
SELECT no, nome, obrano, convert(varchar,datafinal) col4  
    FROM bo
    WHERE nmdos LIKE '%preço%'
    AND datafinal = DATEADD(day, -1, CONVERT(date, GETDATE()))

 --Create a row check to determine whether to send the email or not

DECLARE @rows int;
SET @rows = (SELECT COUNT(*) FROM @dossiers)

 --Set the body elements

DECLARE @message varchar(1000);
-- declare the xml data to pass to the HTML body
DECLARE @xml NVARCHAR(MAX);
-- body will hold the HTML formatted table in the email
DECLARE @body NVARCHAR(MAX);

 --Create the columns that will hold each row of data as xml

SET @xml = CAST(( SELECT col1 AS 'td','',col2 AS 'td','', col3 AS 'td','', col4 AS 'td'
FROM @dossiers
FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX))

 --Set the HTML for the body

SET @body ='<html><body><H3>Dossier Info</H3>
<table border = 1> 
<tr>
<th> Num </th> <th> Nome </th> <th> Dossier </th> <th> Data de Fecho </th></tr>'

 --Stitch everything together, appending the HTML table

SET @body = @body + @xml +'</table></body></html>'

SET NOCOUNT ON 

 --Check if any dossiers met the criteria

IF @rows > 0 
BEGIN

 --Send the email and append the data table to the body

EXEC dbo.uspSendEmail 'Encerramento Dossier Preços', 'email2@domain.pt', @body, NULL, 'email1@domain.pt'
SET NOCOUNT OFF
END

код DDL следующий:

USE [MASS]
GO
/****** Object:  StoredProcedure [dbo].[uspSendEmail]    Script Date: 06/11/2019 11:49:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[uspSendEmail]
 @subject nvarchar(max),
 @to nvarchar(max),
 @body nvarchar(max),
 @file nvarchar(max)='',
 @cc nvarchar(max)='',
 @bcc nvarchar(max)='',
 @query nvarchar(max)='',
 @attach_query_result_as_file tinyint=0,
 @query_attachment_filename nvarchar(max)=''
 as      

 EXEC msdb.dbo.sp_send_dbmail @profile_name = NULL,
 @body_format = 'HTML',
 @copy_recipients = @cc,
 @blind_copy_recipients = @bcc,
 @recipients = @to,
 @body = @body,
 @subject = @subject,
 @file_attachments = @file,
 @query = @query, 
 @attach_query_result_as_file = @attach_query_result_as_file,
 @query_attachment_filename = @query_attachment_filename 
 return 0 

получил новый код, например:

EXEC msdb.dbo.sp_send_dbmail  
    @profile_name = 'SQL-PHC',  
    @recipients = 'email@domain.pt',  
    @query = 'SELECT no, nome, obrano,   
    convert(varchar,datafinal)  
    FROM bo
    WHERE nmdos LIKE "Preços por Cliente"
    AND datafinal = DATEADD(day, -1, CONVERT(date, 
    GETDATE()))' ,  
    @subject = 'Work Order Count',  
    @attach_query_result_as_file = 1 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...