Используйте функцию Merge-OUTPUT для вывода результатов с помощью msdb.dbo.sp_send_dbmail - PullRequest
1 голос
/ 01 мая 2020

Я часто использую инструмент msdb.dbo.sp_send_dbmail на SQL Сервере для автоматических отчетов и тому подобное, но я никогда не использовал его для оператора типа обновления / удаления в разделе @query.

Возможно ли это сделать? Когда я запускаю этот запрос, он дает 0 результатов и не выполняет фактическую функцию слияния и удаления в разделе @query.

Я запускаю тестовый сценарий, где я знаю, что должны быть результаты, и что они должны быть удалены, но не играли в кости. Любой совет приветствуется, поскольку я могу что-то упустить, так как думаю, что это может быть проблемой заказа. Но я подумал, что поместить его в @query следует так, как нужно Стиль запроса ниже:

DECLARE @results NVARCHAR(1000)

Select @results = N'
MERGE Table1 A
USING Table2 B
ON A.ID = B.ID and A.recorddate = B.recorddate
WHEN NOT MATCHED BY SOURCE THEN delete
OUTPUT
$action,
deleted.*;';

Begin
EXEC msdb.dbo.sp_send_dbmail 
    @profile_name = 'Test',
    @recipients= 'test@test.com',
    @query = @results,
    @from_address = 'test@test.com', 
    @subject ='Delete Row',
    @attach_query_result_as_file = 1, 
    @query_attachment_filename = 'Merge Test',
    @query_result_separator='$',
    @query_result_width =32767,
    @query_result_no_padding=1,   
    @body = 'Results',
    @body_format = 'HTML' ;  
End

Результат запроса должен быть выполнен и удалить ненужную строку, а затем вывести результаты, которые, я надеюсь, могут быть экспортированы в .CSV и отправлены мне по электронной почте, так что Я могу просмотреть то, что было удалено.

РЕДАКТИРОВАТЬ: Понял! Просто собираюсь использовать временную таблицу для хранения результатов, выгружать ее в CSV и сбрасывать в конце

select * into #temptable from TableA where 0=1;
MERGE Table1 A
USING Table2 B
ON A.ID = B.ID and A.recorddate = B.recorddate
WHEN NOT MATCHED BY SOURCE THEN delete
OUTPUT
$action,
deleted.* INTO #temptable;
drop table #temptable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...