it-swarm.com.de

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

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

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
;

Vergessen Sie für OUTPUT Variablen nicht, OUTPUT nach dem Namen einzufügen.

Siehe MSDN Specify Parameters :

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.

15

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'
1
Polyakov Anton