1

私はセミコロンで区切られた電子メールアドレスのリストを返すプロシージャusp_emailRecipientsを保存しました。これは、msdb.dbo.sp_send_dbmailを使用して送信された電子メールを受け取る電子メールアドレスのリストです。ストアドプロシージャの戻り値にdbo.sp_send_dbmail引数を設定しますか?

@recipientsの値をストアドプロシージャで返されるリストに設定するにはどうすればよいですか?

現在、ストアドプロシージャは変更できません。

のような何か:

EXEC msdb.dbo.sp_send_dbmail 
@profile_name = 'Bob Jones', 
@recipients = 'exec usp_emailRecipients', 
@subject = 'Test email', 
@execute_query_database = 'Sales', 
@query = N'select * from sales', 
@attach_query_result_as_file = 1, 
@query_attachment_filename = 'Sales.txt' 

感謝。

答えて

1

これをコード化した方法では、受信者の値として文字列リテラルを送信します。これはこの仕組みではありません。これを行う方法は、usp_emailRecipientsでOUTPUT変数を使用することです。これにより、OUTPUTパラメーターを使用するようにプロシージャーを変更する必要があります。次に、このような変数を設定します。

declare @recipientList varchar(max) 
exec usp_emailRecipients @recipientList OUTPUT 

これはsp_send_dbmailを呼び出す前に行います。

EXEC msdb.dbo.sp_send_dbmail 
@profile_name = 'Bob Jones', 
@recipients = @recipientList, 
@subject = 'Test email', 
@execute_query_database = 'Sales', 
@query = N'select * from sales', 
@attach_query_result_as_file = 1, 
@query_attachment_filename = 'Sales.txt' 

--EDIT--

あなたがあなたのストアドプロシージャを変更することはできませんと言うので、あなたのプロシージャの結果セットから区切りのリストを作成するためにXML FOR使用のような何かをする必要があるとしています。

私たちは何もしていないので、このコードは100%テストされていませんが、かなり近いはずです。

create table #EmailList 
(
    EmailAddress varchar(255) 
) 

insert #EmailList 
exec usp_emailRecipients 

declare @recipientList varchar(max) 

select @recipientList = STUFF((select ';' + EmailAddress 
from #EmailList 
FOR XML PATH('')), 1, 1, '') 

次に、上記のようにメールを送信できます。

+0

おかげで、私は、ストアドプロシージャを変更することはできません:そのような場合は、その後、次の操作を行うことができます。 – rbhat

+0

@rbhatup最新の編集を参照してください。 –

1

usp_emailRecipientsプロシージャをスカラー関数にすることができますか?udf_emailRecipients?あなたの提案のための

Declare @recipients as varchar(max) 
Select @recipients= udf_emailRecipients(); 

EXEC msdb.dbo.sp_send_dbmail 
@profile_name = 'Bob Jones', 
@recipients, 
@subject = 'Test email', 
@execute_query_database = 'Sales', 
@query = N'select * from sales', 
@attach_query_result_as_file = 1, 
@query_attachment_filename = 'Sales.txt' 
+0

これは機能しますが、スカラー関数はパフォーマンスの観点から悪く悪いです。 –

+0

あなたの提案をありがとうが、私はストアドプロシージャを変更することはできません。 – rbhat

関連する問題