SQL 修改邮件作业失败

SQL Email Job Failing after amending it

我目前有一个 SQL 作业,它执行特定软件的所有用户列表。

不过,我现在想把名字和姓氏加起来组成一个完整的名字。我创建了简单的 SQL 来处理此类请求,但是当我尝试将其包含到 SQL JOB 中时,它失败了:

失败原因:

[SQLSTATE 42000] (Error 102).  The step failed.

SQL 失败的作业:

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'test=email',
    @recipients = 'test@hotmail.co.uk',
    @subject = 'Users Report',
@body = '<b> Please follow the correct procedure (see other email)
@body_format = 'HTML',    
    @query = 'SELECT   [testDB].[dbo].[base_user].buser_userid  AS [N4 User ID]
            , [testDB].[dbo].[base_user].buser_firstName + ' ' +
           [testDB].[dbo].[base_user].buser_lastName as [Users Name]
            ,[testDB].[dbo].[sec_role].role_name  as [Role]
            ,[testDB].[dbo].[sec_role].role_description as [Description]
            ,[testDB].[dbo].[base_user].buser_active AS [Active?]
FROM      [testDB].[dbo].base_user
INNER JOIN [testDB].[dbo].[sec_user_role_map] ON testDB.dbo.base_user.[buser_gkey] = testDB.dbo.[sec_user_role_map].[usrrolm_user_gkey]
INNER JOIN [testDB].[dbo].[sec_role] ON testDB.dbo.[sec_user_role_map].[usrrolm_role_gkey] = testDB.[dbo].[sec_role].role_gkey

',
    @attach_query_result_as_file = 1;

您需要在 CONCAT

上转义单引号

你还错过了行尾的一个@body

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'test=email',
    @recipients = 'test@hotmail.co.uk',
    @subject = 'Users Report',
@body = '<b> Please follow the correct procedure (see other email)',
@body_format = 'HTML',    
    @query = 'SELECT   [testDB].[dbo].[base_user].buser_userid  AS [N4 User ID]
            , [testDB].[dbo].[base_user].buser_firstName + '' '' +
           [testDB].[dbo].[base_user].buser_lastName as [Users Name]
            ,[testDB].[dbo].[sec_role].role_name  as [Role]
            ,[testDB].[dbo].[sec_role].role_description as [Description]
            ,[testDB].[dbo].[base_user].buser_active AS [Active?]
FROM      [testDB].[dbo].base_user
INNER JOIN [testDB].[dbo].[sec_user_role_map] ON testDB.dbo.base_user.[buser_gkey] = testDB.dbo.[sec_user_role_map].[usrrolm_user_gkey]
INNER JOIN [testDB].[dbo].[sec_role] ON testDB.dbo.[sec_user_role_map].[usrrolm_role_gkey] = testDB.[dbo].[sec_role].role_gkey

',
    @attach_query_result_as_file = 1;