Итак, я получил эту хранимую процедуру. Я использую 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 ;