次の方法で共有


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