sql - 使用 Merge-OUTPUT 函数通过 msdb.dbo.sp_send_dbmail 转储结果
问题描述
我经常msdb.dbo.sp_send_dbmail
在 SQL Server 中使用该工具来生成自动报告等,但我从未真正将它用于该@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
解决方案
推荐阅读
- java - JAVAFX : 三个 tableviews => 当我选择一个 tableview 时,必须删除其他的并删除颜色
- csv - Grep:从第二列中删除重复的输入
- java - micronaut HttpResponse 读取正文
- windows - Golang httpClient CA证书默认位置?
- c# - 如何使用没有约束的类型参数调用具有泛型约束的方法?
- csv - 使用 CMD/Batch 从 CSV 中删除列
- sql - 在 SQL Server 中锁定多个表
- maps - 填充MRPT velodyne扫描观察
- garmin - Garmin 应用程序步数、活动和睡眠数据
- ssl - 无法在 Centos7 apache2 上安装 Comodo SSL 证书