Transact-SQL 参考

sp_processmail

使用扩展存储过程(xp_findnextmsgxp_readmailxp_deletemail)处理 Microsoft® SQL Server™ 收件箱中收到的邮件(应只有单个查询)。SQL Server 用 xp_sendmail 扩展存储过程向邮件发送者返回结果集。

语法

sp_processmail [ [ @subject = ] 'subject' ]
    [ , [ @filetype = ] 'filetype' ]
    [ , [ @separator = ] 'separator' ]
    [ , [ @set_user = ] 'user' ]
    
[ , [ @dbuse = ] 'dbname' ]

参数

[@subject =] 'subject'

是邮件的主题行,该行将解释为 SQL Server 查询。subjectvarchar(255) 类型,其默认值为 NULL。若指定此参数,sp_processmail 将只处理有此主题的邮件。默认情况下,SQL Server 象处理查询一样处理所有邮件。

[@filetype =] 'filetype'

是将结果集文件发送回邮件发送者时使用的文件扩展名。filetypevarchar(3) 类型,其默认值为 txt。

[@separator =] 'separator'

是结果集中每列的列分隔符(字段终止符)。这一信息将传递给扩展存储过程 xp_sendmail 以向邮件发送者返回结果集。separatorvarchar(3) 类型,其默认值为 tab,表示在各列之间使用制表符的特殊情况。

[@set_user =] 'user'

是应在其中运行查询的安全上下文。user 的数据类型为 sysname。如果没有指定 user,则安全上下文默认授予执行 xp_sendmail 的用户。

[@dbuse =] 'dbname'

是查询应运行于其中的数据库上下文。dbnamesysname 类型,其默认值为 master

返回代码值

0(成功)或 1(失败)

结果集

注释

外来电子邮件应以一个单独的有效 SQL Server 查询作为其邮件正文。查询的结果将返回给邮件发件人,并抄送给抄送列表中的所有电子邮件用户。邮件经过处理后,将从收件箱中删除。如果时常有电子邮件发送给服务器,就应经常运行 sp_processmail。若要设置定期的电子邮件处理,可使用 SQL Server 代理程序来调度 sp_processmail 作业。这样,邮件将按指定的频率处理,并在作业历史记录中记录信息性消息,其中包含已处理的查询数目。

返回结果将作为附件文件发送。所发送文件的完整文件名由 Sql 后加随机数字字符串构成,然后是指定的扩展名(文件类型),例如 Sql356.txt。

重要  若要在邮件中附加适当的图标,需确保文件类型的关联正确。若要创建文件关联,请双击桌面上的"我的电脑",然后选择"视图"菜单中的"选项"命令。在"选项"对话框中的"文件类型"选项卡上,指定用于打开文件的应用程序。

处理查询时收到的错误通过邮件正文返回给邮件发送者。将结果集返回给客户端时,会调用 xp_sendmail,并将其参数 @echo_error 设为 true。所发送的邮件还会包括查询的行数(影响到的行数)。

可为不同数据库中的查询设置不同的 sp_processmail 作业。例如,可采用这样的约定:对数据库 pubs 的查询的主题必须为 SQL:pubs。然后,可运行 sp_processmail,并使用参数 subject = SQL:pubsdbname = pubs。其它数据库查询和分组可有其它格式化的结构。例如,分发任务可有 subject = SQL:distributiondbname = distribution。任何这些任务均可以是 SQL Server 代理程序调度的作业。

也可以按许多方式自定义 sp_processmail 系统存储过程,方法是用 sp_helptext 系统存储过程检索该过程的正文,然后修改其 Transact-SQL 代码。可能的更改包括:

权限

只有 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员可执行此过程。

示例

下面的示例处理 pubs 数据库中的所有邮件,并将结果集以 CSV(逗号分隔的值)格式返回给客户端。

sp_processmail @filetype = 'CSV', @separator = ',', @dbuse = 'pubs'

请参见

sp_addtask

系统存储过程

xp_deletemail

xp_findnextmsg

xp_readmail

xp_sendmail