web-dev-qa-db-ja.com

ストアドプロシージャSQLサーバーの '+'付近の構文が正しくありません

パラメータを受け取り、一部の受信者にメールを送信するストアドプロシージャを書いています。 SQL組み込みストアドプロシージャを使用しています。

ここにコードがあります

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;

+シンボルでエラーが発生します。 +シンボルを削除して実行すると、プロシージャが実行されます。そうでない場合、エラーが発生します。少し助けてください。

私はこれを知識ベースで試みています。ですので、このようなメールを送信することの短所があれば遠慮なく共有してください。

ありがとうございました。

3
Wan Street

msdb.dbo.sp_send_dbmailプロシージャ(または他のプロシージャ)は、パラメータまたはリテラル値のいずれかのみを受け入れます。

sp_send_dbmailの実行を次のように変更することを検討してください:

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' ;

ユーザー定義のストアドプロシージャの例:

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';

メッセージ102、レベル15、状態1、行46「+」付近の構文が正しくありません。

9
Randi Vertongen