sysmail_delete_mailitems_sp (Transact-SQL)

从数据库邮件内部表中永久删除电子邮件。

主题链接图标Transact-SQL 语法约定

语法

sysmail_delete_mailitems_sp  [ [ @sent_before = ] 'sent_before' ]
    [ , [ @sent_status = ] 'sent_status' ]

参数

  • [ @sent_before= ] 'sent_before'
    删除作为 sent_before 参数提供的日期和时间之前的电子邮件。sent_before 的数据类型为 datetime,默认值为 NULL。NULL 指示所有日期。

  • [ @sent_status= ] 'sent_status'
    删除 sent_status 指定的类型的电子邮件。sent_status 的数据类型为 varchar(8),无默认值。有效项为 sent、unsent、retrying 和 failed。NULL 指示所有状态。

返回代码值

0(成功)或 1(失败)

注释

数据库邮件及其附件存储在 msdb 数据库中。应该定期删除邮件以免 msdb 的增长超过预期大小,并且符合您单位的文档保持期计划。使用 sysmail_delete_mailitems_sp 存储过程可从数据库邮件表中永久删除电子邮件。某个可选参数通过提供日期和时间,允许您仅删除较早的电子邮件。早于该参数的电子邮件将被删除。另一个可选参数允许您仅删除作为 sent_status 参数指定的特定类型的电子邮件。必须为 @sent_before@sent_status 提供参数。若要删除所有消息,请使用 @sent_before = getdate()

删除电子邮件也会删除与这些邮件相关的附件。删除电子邮件不会删除 sysmail_event_log 中的对应项。使用 sysmail_delete_log_sp 可从日志中删除项。

权限

默认情况下,授权 sysadmin 固定服务器角色和 DatabaseMailUserRole 的成员执行此存储过程。sysadmin 固定服务器角色的成员可执行此存储过程来删除所有用户发送的电子邮件。DatabaseMailUserRole 的成员只能删除该用户发送的电子邮件。

示例

A. 删除所有电子邮件

以下示例删除数据库邮件系统中的所有电子邮件。

DECLARE @GETDATE datetimeSET @GETDATE = GETDATE()EXECUTE msdb.dbo.sysmail_delete_mailitems_sp @sent\_before = @GETDATE;GO

B. 删除最早的电子邮件

以下示例将删除数据库邮件日志中 October 9, 2005 之前的电子邮件。

EXECUTE msdb.dbo.sysmail_delete_mailitems_sp 
    @sent_before = 'October 9, 2005' ;
GO

C. 删除特定类型的所有电子邮件

以下示例删除数据库邮件日志中所有失败的电子邮件。

EXECUTE msdb.dbo.sysmail_delete_mailitems_sp 
    @sent_status = 'failed' ;
GO