SQL Server übergibt eine Variable an eine Zeichenfolge in einem gespeicherten Prozess

8

Ich versuche, eine benutzerdefinierte Zeichenfolge mit einer Variablen zu verketten, die ein int ist. Investigation is pending for ['+ @investigationidout +']. Wenn ich den Mauszeiger über das erste +Zeichen bewege, heißt es:

Falsche Syntax in der Nähe von '+'

Ist das möglich ?

Ich muss so etwas sehen wie:

Die Untersuchung für 1234 steht noch aus

Meine Anfrage:

    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
Pawel85
quelle

Antworten:

15

Die einer Prozedur gelieferten Parameter müssen Konstanten oder Variablen sein. Eine Funktion oder die Ausgabe einer Funktion oder eines Ausdrucks kann nicht verwendet werden.

Sie müssten zuerst eine Variable mit dem erforderlichen Ausdruck festlegen:

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
;

OUTPUTVergessen Sie bei Variablen nicht, OUTPUTnach dem Namen hinzuzufügen .

Siehe MSDN-Parameter angeben :

Die mit einem Prozeduraufruf gelieferten Parameterwerte müssen Konstanten oder eine Variable sein. Ein Funktionsname kann nicht als Parameterwert verwendet werden. Variablen können benutzerdefinierte oder Systemvariablen wie @@ spid sein.

Julien Vavasseur
quelle
1

Zum Beispiel habe ich so etwas getan, um verkettete Zeichenfolgen an meine gespeicherte Prozedur zu übergeben

select top 10 * from sbat

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

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