次の方法で共有


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