ストアド プロシージャを SQL Mail からデータベース メールに変換する方法 (Transact-SQL)

データベース メールを使用すると、SQL Server 2005 から電子メールを送信できます。電子メールを送信するには、sp_send_dbmail ストアド プロシージャを使用します。このプロシージャで必要な引数は、xp_sendmail の引数と似ています。したがって、xp_sendmail を使用するプロシージャを sp_send_dbmail を使用するように変換する作業は簡単です。

sp_send_dbmail で独自に必要になる最も重要なパラメータは、必要に応じてメッセージの送信に使用するメール プロファイルです。データベース メール プロファイルは、データベース メール構成ウィザードまたはデータベース メールのストアド プロシージャを使用して作成します。メール ホスト データベースとして使用できるのは、msdb データベースだけです。

ストアド プロシージャを SQL Mail からデータベース メールに変換するには

  1. データベース メールがまだ有効になっていない場合は、有効にします。データベース メールを有効にするには、データベース メール構成ウィザードを使用します。

  2. まだプロファイルを作成していない場合は、データベース メール プロファイルを作成します。データベース メール プロファイルを作成する方法の詳細については、「データベース メールのプライベート プロファイルを作成する方法 (Transact-SQL)」を参照してください。

  3. xp_sendmail への呼び出しを sp_send_dbmail への呼び出しと置き換えます。次の表で示すように、引数を xp_sendmail から sp_send_dbmail にマップします。

xp_sendmail 引数

sp_send_dbmail 引数

@recipients

@recipients

@message

@body

@query

@query

@attachments

@file_attachments

@copy_recipients

@copy_recipients

@blind_copy_recipients

@blind_copy_recipients

@subject

@subject

@type

なし

@attach_results

@attach_query_result_as_file

@no_output

@exclude_query_output

@no_header

@query_result_header

@width

@query_result_width

@separator

@query_result_separator

@echo_error

なし

@set_user

なし

@dbuse

@execute_query_database

  1. プロシージャを更新するときは、次の相違点を考慮してください。

    • MAPI メッセージ入力を使用できません。データベース メールでは拡張 MAPI を使用しないので、ストアド プロシージャからメッセージ型を設定することはできません。

    • @query パラメータを指定した場合、クエリからのエラーが sp_send_dbmail を呼び出したセッションに返されます。

    • @query パラメータを指定した場合、クエリが現在のユーザーとして実行されます。ただし、クエリには、EXECUTE AS ステートメントなど、任意の有効な Transact-SQL が含まれていることがあります。

    • データベース メールでは、SQL Mail でサポートされていない以下のオプションがサポートされています。

    sp_send_dbmail 引数

    説明

    @profile_name

    メッセージに使用するメール プロファイルを指定します。データベース メールでは、高い信頼性とスケーラビリティを提供するために、複数のプロファイルと各プロファイルの複数のアカウントがサポートされています。メール ホスト データベースまたは sp_send_dbmail を呼び出しているユーザーの既定のプロファイルがある場合は、@profile を省略できます。

    @body_format

    TEXT または HTML のいずれかで電子メール メッセージの形式を指定します。

    @importance

    電子メール メッセージの重要度を指定します。

    @sensitivity

    電子メール メッセージの秘密度を指定します。

    @query_attachment_filename

    クエリの結果をファイルとして添付するときに使用するファイル名を指定します。@attach_results= TRUExp_sendmail @query parameter を使用する場合、@attachments パラメータでは、メール メッセージに添付するファイルを 1 つだけ指定できます。sp_send_dbmail には、@file_attachments

    @query_attachment_filename の両方が含まれています。

使用例

次の例では、SQL Mail を使用して、danw@Adventure-Works.com にメッセージを送信します。

EXEC master.dbo.xp_sendmail 
    @recipients=N'danw@Adventure-Works.com',
    @message=N'The master database is full.' ;

EXEC master.dbo.xp_sendmail 
    @recipients=N'danw@Adventure-Works.com',
    @message=N'The master database is full.' ;

次の例では、データベース メールと現在のユーザーの既定のプロファイルを使用して、同じメッセージを送信します。

EXEC msdb.dbo.sp_send_dbmail
    @recipients=N'danw@Adventure-Works.com',
    @body=N'The master database is full.' ;

EXEC msdb.dbo.sp_send_dbmail
    @recipients=N'danw@Adventure-Works.com',
    @body=N'The master database is full.' ;

このプロシージャが msdb データベースで実行されることに注意してください。