sysmail_delete_mailitems_sp (Transact-SQL)

适用于:SQL Server

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

Transact-SQL 语法约定

语法

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

参数

[ @sent_before = ] 'sent_before'

删除作为 @sent_before 参数提供日期和时间的电子邮件。 @sent_before是默认为 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 DATETIME;

SET @GETDATE = GETDATE();

EXECUTE msdb.dbo.sysmail_delete_mailitems_sp @sent_before = @GETDATE;
GO

B. 删除最早的电子邮件

以下示例删除早于 2022 年 10 月 9 日数据库邮件日志中的电子邮件。

EXEC msdb.dbo.sysmail_delete_mailitems_sp
    @sent_before = 'October 9, 2022';
GO

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

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

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