24

ここでの最初の質問は次のとおりです。私は次のコードを書きましたが、すべてが正常に機能します。

DECLARE @subject NVARCHAR(100)
SET @subject = 'Report executed on ' + CONVERT(VARCHAR(12), GETDATE(), 107)
SELECT @subject

結果:2012年8月17日に実行されたレポート

ただし、msdb.dbo.sp_send_dbmailプロシージャのパラメータを設定しているときに前の文字列を連結しようとすると、失敗します。

EXEC msdb.dbo.sp_send_dbmail @profile_name='XXX',
@recipients='XXXX@XXXXX.com',
@subject = 'Report executed on ' + CONVERT(VARCHAR(12), GETDATE(), 107),
@body= @tableHTML,
@body_format = 'HTML';

変数を宣言してパラメーターに送信できることは知っていますが、パラメーターに直接連結すると失敗する理由を理解したいと思います。時間と知識をありがとう

4

2 に答える 2

34

T-SQL ストアド プロシージャのパラメーター値を式にすることはできません。定数または変数のいずれかである必要があります。

MSDNから- パラメータの指定:

プロシージャー呼び出しで提供されるパラメーター値は、定数または変数でなければなりません。関数名をパラメーター値として使用することはできません。変数は、ユーザー定義変数または @@spid などのシステム変数にすることができます。

于 2012-08-17T16:55:50.767 に答える
5

あなたがする必要があります:

DECLARE @Sub nvarchar(100);
SET @Sub = 'Report executed on ' + CONVERT(VARCHAR(12), GETDATE(), 107);
EXEC msdb.dbo.sp_send_dbmail @profile_name='XXX',
@recipients='XXXX@XXXXX.com',
@subject = @Sub,
@body= @tableHTML,
@body_format = 'HTML';
于 2012-08-17T19:08:54.997 に答える