В начале отмечаю - я не специалист по написанию кода. Мне нужна ваша помощь. Я хочу реализовать систему уведомлений по электронной почте через sp_send_dbmail.
Код:
USE msdb
go
SET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON
EXEC sp_send_dbmail @profile_name='PROFILENAME',
@recipients='[email protected]',
@query_result_header=0,
@attach_query_result_as_file=0,
@query = "select Kod,Nazwa from DATABASE.dbo.Towar where Kod NOT LIKE '%?%' and (AsId=205 or AsId=304 or AsId=289 or AsId=321 or AsId=306 or AsId=217 or AsId=261) and Aktywny=1 ORDER BY Kod",
@body_format = "text",
@subject='SUBCJECT'
GO
SQL-запрос работает и отправляет электронное письмо, но также отправляет пустые строки. Например. Как избавиться от них?
1916 SER TWAROGOWY WIEJSKI LUZ
Я также хотел бы, чтобы sp_send_dbmail отправлял электронное письмо только тогда, когда запрос возвращает данные. Если нет данных - не отправляет сообщения.
Кстати, я предлагаю вам использовать SET QUOTED_IDENTIFIER ON и заключать литералы в стандартные одинарные кавычки ANSI/ISO, удваивая одинарные кавычки внутри строк.
Это электронная почта. Между данными есть пустые строки. Я предпочитаю, чтобы сообщение выглядело более разборчивым. Ссылка: drive.google.com/file/d/1MZvgEiF_t4H-7vbHGrYAczPEfiayTAiG/…


Я думаю, вам нужно IF, если вы хотите условное электронное письмо:
IF EXISTS (select Kod, Nazwa from DATABASE.dbo.Towar where Kod NOT LIKE '%?%' and AsId IN (205, 304, 289, 321, 306, 217, 261) and Aktywny = 1)
BEGIN
EXEC sp_send_dbmail @profile_name='PROFILENAME',
@recipients='[email protected]',
@query_result_header=0,
@attach_query_result_as_file=0,
@query='select Kod, Nazwa from DATABASE.dbo.Towar where Kod NOT LIKE ''%?%'' and AsId IN (205, 304, 289, 321, 306, 217, 261) and Aktywny=1 ORDER BY Kod',
@body_format='text',
@subject='SUBCJECT';
END;
GO
Эти «пустые строки» являются возвратом каретки. CHR(10) и CHR(13)
Что вы имеете в виду под "пустыми строками"? Ваш пример не показывает пустые строки. Если вы хотите, чтобы отправка была условной, то вам нужен
ifперед звонком.