web-dev-qa-db-ja.com

ストアドプロシージャの文字列に変数を渡すSQL Server

カスタム文字列をintである変数と連結しようとしています。 Investigation is pending for ['+ @investigationidout +']。最初の+記号の上にマウスポインターを置くと、次のように表示されます。

「+」付近の構文が正しくありません

これは可能ですか?

私は次のようなものを見る必要があります:

調査は1234まで保留中です

私のクエリ:

    EXEC sp_wf_create_notification 
        @processid,
        @vactivityid,
        @vstepid,
        1,
        @vidColumn,
        @vidColumnTable,
        @investigationidout,
        @owner,
        'Pending Investigation',
        'Investigation is pending for  ['+ @investigationidout +'] '
        @nextstepurl,
        @vstatus OUTPUT,
        @verror OUTPUT
8
Pawel85

プロシージャに提供されるパラメータは、定数または変数である必要があります。関数または関数の出力または式は使用できません。

最初に、必要な式で変数を設定する必要があります。

declare @investigation varchar(100);
set @investigation = 'Investigation is pending for  ['+ @investigationidout +'] ';

EXEC sp_wf_create_notification 
    @processid,
    @vactivityid,
    @vstepid,
    1,
    @vidColumn,
    @vidColumnTable,
    @investigationidout,
    @owner,
    'Pending Investigation',
    @investigation
    @nextstepurl,
    @vstatus OUTPUT,
    @verror OUTPUT
;

OUTPUT変数の場合は、名前の後にOUTPUTを追加することを忘れないでください。

MSDN Specify Parameters を参照してください。

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

15

たとえば、連結した文字列をストアドプロシージャに渡すために次のようなことをしました

select top 10 * from sbat

declare @string varchar(max) = 'Rows inserted:' + cast(@@ROWCOUNT as varchar)

exec proc_Log @msg = @string, @tablename = 'STG_SBAT_test'
1
Polyakov Anton