Поделиться через


sysmail_delete_mailitems_sp (Transact-SQL)

Область применения: SQL Server

Окончательно удаляет сообщения электронной почты из внутренних таблиц компонента Database Mail.

Соглашения о синтаксисе 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 (сбой).

Замечания

Сообщения database Mail и их вложения хранятся в msdb базе данных. Сообщения следует периодически удалять, чтобы предотвратить msdb увеличение размера, чем ожидалось, и соблюдать программу хранения документов в организациях. Используйте хранимую sysmail_delete_mailitems_sp процедуру для окончательного удаления сообщений электронной почты из таблиц Database Mail. Необязательный аргумент позволяет удалить только старые сообщения, указав дату и время. Сообщения, которые старше этого аргумента, будут удалены. Другой необязательный аргумент позволяет удалять только сообщения электронной почты определенного типа, указанные в качестве аргумента @sent_status . Необходимо указать аргумент для @sent_before или @sent_status. Чтобы удалить все сообщения, используйте @sent_before = GETDATE();.

Удаление сообщений электронной почты также удаляет вложения, связанные с этими сообщениями. Удаление электронной почты не удаляет соответствующие записи в sysmail_event_log. Используйте sysmail_delete_log_sp для удаления элементов из журнала.

Разрешения

По умолчанию эта хранимая процедура предоставляется для выполнения членам предопределенной роли сервера sysadmin и DatabaseMailUserRole. Члены предопределенных ролей сервера sysadmin могут выполнить эту процедуру, чтобы удалить сообщения электронной почты, отправленные всеми пользователями. Члены DatabaseMailUserRole могут удалять только сообщения электронной почты, отправленные этим пользователем.

Примеры

А. Удаление всех сообщений электронной почты

Следующий пример удаляет все сообщения электронной почты в системе компонента Database Mail.

DECLARE @GETDATE DATETIME;

SET @GETDATE = GETDATE();

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

B. Удаление старейших сообщений электронной почты

В следующем примере удаляются сообщения электронной почты в журнале Database Mail, которые старше 9 октября 2022 г.

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

C. Удаление всех сообщений электронной почты определенного типа

Следующий пример удаляет все неудачные сообщения электронной почты в журнале компонента Database Mail.

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