【问题标题】:How can do a dynamic query in this scenario . sql 2005在这种情况下如何进行动态查询。 sql 2005
【发布时间】:2018-01-25 23:03:35
【问题描述】:

我正在尝试从查询中输入用户 ID 以向他们发送电子邮件。 它不起作用并给我这个错误

消息 14624,级别 16,状态 1,过程 sp_send_dbmail,第 238 行在 必须至少指定以下参数之一。 “@收件人, @copy_recipients,@blind_copy_recipients”。

declare @bodymsg nvarchar(max)
select @bodymsg = '<font face="calibiri" size="4" >Dear Users</font><br><br>
<font face="calibiri" size="5" color="red">Please Explain the Exrta Locked Faxes</font><br><br>
<font face="calibiri" size="4" >Check the Last Hour Snapshot Details Attached.<br><br>
Thanks</font></end>'

declare @users_fetched  varchar(max)
set @users_fetched = 'SELECT distinct Locked_Faxes_Last_Hour_Snap.userid from Locked_Faxes_Last_Hour_Snap'


declare @recipients varchar(max)

SELECT 
@recipients = STUFF((SELECT ';' + concerned_staff.staff_email from concerned_staff where (concerned_staff.staff_id in ('@users_fetched')) 
                        FOR XML PATH('')
                       ), 1, 1, '')

EXEC msdb.dbo.sp_send_dbmail


@recipients = @recipients ,

@body= @bodymsg ,
@subject = 'Alert !!! Locked Faxes Violation Last Hour Snaps' ,
@profile_name = 'Database Profile 1',
@query = 'use qtel select * from dbo.Locked_Faxes_Last_Hour_Snap' ,
@attach_query_result_as_file = 1,
@query_attachment_filename ='Locked_Faxes_Last_Hour_Snap.csv',
@query_result_separator =',',
@query_result_no_padding=1,
@exclude_query_output=1,
@append_query_error=0,
@query_result_header =1,
@body_format ='HTML',
@importance= 'HIGH';

【问题讨论】:

  • 如果您注释掉 exec msdb.dbo.sp_send_dbmail 命令并选择 @recipients 它会返回什么?
  • @scsimon 当我选择 atrecipients 它给出“null”,当我选择 atusers_fetched 它给出“SELECT distinct Locked_Faxes_Last_Hour_Snap.userid from Locked_Faxes_Last_Hour_Snap” :(
  • 为什么还要使用动态sql?你不需要它。只需将您的选择放在子查询中而不是 '@users_fetched' 并运行它。现在您正在混合不属于它的查询字符串,动态查询将需要一种完全不同的方法。
  • 感谢@NenadZivkovic 谁能把你的意思的子查询从主查询中的变量中替换掉?
  • 您是否尝试在 EXEC 之前将; 放在行中?还要去掉双空行。

标签: sql sql-server sql-server-2005 dynamic-sql


【解决方案1】:

这里不需要动态 sql。当您创建收件人时,只需将用于获取用户的查询作为 where 条件 IN 子查询:

SELECT 
@recipients = STUFF((SELECT ';' + concerned_staff.staff_email 
                     from concerned_staff 
                     where concerned_staff.staff_id in 
                     (
                         SELECT Locked_Faxes_Last_Hour_Snap.userid 
                         from Locked_Faxes_Last_Hour_Snap
                     )
                     FOR XML PATH('')
                     ), 1, 1, '')

【讨论】:

  • 感谢您的工作就像一个魅力 :) 可爱
猜你喜欢
  • 1970-01-01
  • 2013-04-25
  • 2011-01-09
  • 1970-01-01
  • 2014-06-26
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多