web-dev-qa-db-fra.com

SQL Server passant une variable à une chaîne dans un proc stocké

J'essaie de concaténer une chaîne personnalisée avec une variable qui est un int. Investigation is pending for ['+ @investigationidout +']. Lorsque je passe le pointeur de la souris sur le premier + signe qu'il dit:

Syntaxe incorrecte près de '+'

Est-ce possible ?

J'ai besoin de voir quelque chose comme:

Une enquête est en cours pour 1234

Ma requête:

    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

Les paramètres fournis à une procédure doivent être des constantes ou des variables. Une fonction ou la sortie d'une fonction ou d'une expression ne peut pas être utilisée.

Vous devez d'abord définir une variable avec l'expression requise:

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
;

Pour les variables OUTPUT, n'oubliez pas d'ajouter OUTPUT après son nom.

Voir MSDN spécifier les paramètres :

Les valeurs des paramètres fournies avec un appel de procédure doivent être des constantes ou une variable; un nom de fonction ne peut pas être utilisé comme valeur de paramètre. Les variables peuvent être définies par l'utilisateur ou des variables système telles que @@ spid.

15
Julien Vavasseur

Par exemple, j'ai fait quelque chose comme ça pour passer des chaînes concaténées à ma procédure stockée

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