web-dev-qa-db-fra.com

Syntaxe incorrecte près de «+» dans le serveur SQL de procédure stockée

J'écris une procédure stockée qui acceptera un paramètre et enverra du courrier à certains destinataires. J'utilise la procédure stockée intégrée sql.

voici le code

create proc send_mail_admin(@usage_data as varchar(200))
as
begin

--get the list of mail admins from Users

declare @admin_list varchar(max);



set @admin_list = '';

--query to get all the admins

begin
    select 
        @admin_list = @admin_list + email + ';'
    from
        Users;
end

--call the mail stored procedure

exec msdb.dbo.sp_send_dbmail 
@profile_name='some_mail_profile',
@recipients=@admin_list,
@subject='Mail from sql server',
@body=@usage_data + ' end of data',
@importance='HIGH' ;



end;

Je reçois une erreur dans le + symbole. Si je supprime le + symbole et exécution, la procédure est en cours d'exécution. Sinon, cela donne une erreur. Un peu d'aide s'il vous plaît.

J'essaie ceci sur une base de connaissances. N'hésitez donc pas à partager les inconvénients d'envoyer un mail comme celui-ci s'il y en a.

Je vous remercie.

3
Wan Street

Le msdb.dbo.sp_send_dbmail procédure (ou autres procédures) n'accepte qu'un paramètre ou une valeur littérale.

Pensez à modifier l'exécution de sp_send_dbmail pour ça:

SET @usage_data += ' end of data'

exec msdb.dbo.sp_send_dbmail 
@profile_name='some_mail_profile',
@recipients=@admin_list,
@subject='Mail from sql server',
@body=@usage_data,
@importance='HIGH' ;

Un exemple avec une procédure stockée définie par l'utilisateur:

CREATE PROCEDURE dbo.bla(@dbname varchar(255))
as 
SELECT * 
FROM sys.databases  
WHERE NAME = @dbname;
GO

DECLARE @dbname varchar(200);
SET @dbname ='Half';

EXEC dbo.bla @dbname+'OtherHalf';

Msg 102, niveau 15, état 1, ligne 46 Syntaxe incorrecte près de '+'.

9
Randi Vertongen