Share via


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は 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 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