执行前检查sp_send_email权限

har*_*ott 0 sql-server email

在我的存储过程中,我使用sp_send_email发送电子邮件.我的存储过程将在不同的环境中运行; 有些人会启用电子邮件,有些则不会.

如果我在没有启用它的情况下运行sp_send_email,我(非常正确地)会收到此错误消息

SQL Server阻止访问组件"Database Mail XPs"的过程"dbo.sp_send_dbmail",因为此组件已作为此服务器的安全配置的一部分关闭.

我想检查是否先启用了电子邮件,因此我可以通过执行以下操作来避免错误:

IF @is_enabled
BEGIN
    EXEC sp_send_email ...
END
Run Code Online (Sandbox Code Playgroud)

如何正确设置@is_enabled?

gbn*_*gbn 5

您可以查询sys.configurations

IF EXISTS (SELECT *
       FROM sys.configurations
       WHERE name = 'Database Mail XPs' AND value_in_use = 1)
    PRINT 'enabled'
ELSE
    PRINT 'no luck'
Run Code Online (Sandbox Code Playgroud)

缺点是由于"元数据可见性",非系统管理员用户可能看不到它