Sql server 2008 子查询返回了多个值
我需要在SQL Server 2008中设置一个作业,以便在本月初向客户发送电子邮件时运行。但是,我不知道如何循环子查询的结果 导致此错误消息的原因: 子查询返回了多个值。 这是不允许的,因为 子查询后面是=,!== 或者当子查询用作 表情 以下是相关代码:Sql server 2008 子查询返回了多个值,sql-server-2008,loops,subquery,Sql Server 2008,Loops,Subquery,我需要在SQL Server 2008中设置一个作业,以便在本月初向客户发送电子邮件时运行。但是,我不知道如何循环子查询的结果 导致此错误消息的原因: 子查询返回了多个值。 这是不允许的,因为 子查询后面是=,!== 或者当子查询用作 表情 以下是相关代码: SET @Recipients =(SELECT DISTINCT a.EMail FROM a --approximately 600 email addresses SET @MailSubje
SET @Recipients =(SELECT DISTINCT a.EMail
FROM a
--approximately 600 email addresses
SET @MailSubject = 'Customer News'
SET @MailRecipients = @Recipients
SET @MailMessage = 'Dear customer, Attached is your customer news letter.'
SET @FileName = N'E:file\to\be\attached.doc'
EXEC msdb.dbo.sp_send_dbmail @recipients = @MailRecipients,
@body = @MailMessage,
@blind_copy_recipients='misj@mikl.org',
@subject = @MailSubject,
@file_attachments = @FileName
问题是
@recipients=@MailRecipients
。它需要一个字符串(电子邮件地址),而您正在给它一个记录集。问题是@recipients=@MailRecipients
。它需要一个字符串(一个电子邮件地址),而您正在给它一个记录集。错误在这里,您有许多行试图分配给单个变量
SET @Recipients =(SELECT DISTINCT a.EMail
FROM a
--approximately 600 email addresses
因此,您需要将其更改为一个单独的列表
SET @Recipients = STUFF(
(select DISTINCT ';' + CAST(a.EMail AS varchar(max))
FROM a FOR XML PATH ('')
)
,1,1, '')
注意:@Recipients将需要是varchar(max)这里的错误是您有许多行试图分配给单个变量
SET @Recipients =(SELECT DISTINCT a.EMail
FROM a
--approximately 600 email addresses
因此,您需要将其更改为一个单独的列表
SET @Recipients = STUFF(
(select DISTINCT ';' + CAST(a.EMail AS varchar(max))
FROM a FOR XML PATH ('')
)
,1,1, '')
注意:@Recipients需要是varchar(max)您如何更正此问题?我可以将此存储过程设置为在记录集中循环吗?错误发生在set@Recipients调用之前。。。存储过程调用正常,您如何更正此问题?我可以将此存储过程设置为在记录集中循环吗?错误发生在set@Recipients调用之前。。。存储过程调用正常。谢谢。它似乎只发送列出的第二个电子邮件地址,并截断电子邮件地址的第一个字母。@Mikki:我无法测试(手头没有SQL Server),但XML路径应生成如下完整列表谢谢。它似乎只发送了第二个电子邮件地址,并截断了电子邮件地址的第一个字母。@ Mikki:我不能测试(没有SQL Server到手),但是XML路径应该生成这样一个完整的列表。这可能是一个考虑使用Real-Go选择光标的地方(如果操作已经变得势在必行,并且不再是基于设置)。但是,SQL Server还支持表变量。一个
插入到表变量中。sp\u send\u dbmail
过程的签名是什么?(这将导致更好的答案,而不仅仅是“为什么它不起作用”;-)这可能是一个考虑使用稀有的好选择光标的地方(如果操作已经变得势在必行,并且不再是基于设置)。但是,SQL Server还支持表变量。一个插入到表变量中。sp\u send\u dbmail
过程的签名是什么?(这将导致更好的答案,而不仅仅是“为什么它不起作用”;-)