Я часто использую инструмент 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