MSSQL: Как проверить, вызывать ли sysmail_add_account_sp или нет? - PullRequest
0 голосов
/ 04 июня 2018

У меня есть фрагмент сценария установки MS-SQL, который добавляет учетную запись sysmail (а затем профиль sysmail ...)

EXECUTE msdb.dbo.sysmail_add_account_sp
    @account_name = 'myaccount',
    @description = 'xxx',
    @email_address = 'myaddress@example.com',
    @replyto_address = 'myaddress@example.com',
    @display_name = 'My Mailer Account',
    @mailserver_name = 'smtp.example.com' ;

Как проверить внутри сценария SQL, существует ли учетная запись (пропустить двойную установку, которая может вызвать ошибки)?

Должен ли я запросить представление msdb.dbo.sysmail_account?Или мне лучше TRY ... CATCH EXEC msdb.dbo.sysmail_help_account_sp @account_name='myaccount', который терпит неудачу, если аккаунт не существует?

Есть ли лучший способ?

1 Ответ

0 голосов
/ 05 июня 2018

Вы можете использовать запрос, чтобы проверить, существует ли учетная запись, затем обновить (при необходимости) или создать.

DECLARE 
    @AccountName VARCHAR(100) = 'account_name',
    @email_address VARCHAR(100) = 'email_address',
    @display_name VARCHAR(100) = 'display_name',
    @replyto_address VARCHAR(100) = 'replyto_address',  
    @description VARCHAR(100) = 'description',   
    @mailserver_name VARCHAR(100) = 'server_name',   
    @mailserver_type VARCHAR(100) = 'server_type',   
    @port VARCHAR(100) = 587,
    @timeout INT = 30,  
    @username VARCHAR(100) = 'username',  
    @password VARCHAR(100) = 'password',  
    @use_default_credentials BIT = 1,
    @enable_ssl BIT = 0


IF EXISTS (SELECT 'email account already created' FROM msdb.dbo.sysmail_account AS T WHERE T.name = @AccountName)

    EXEC msdb.dbo.sysmail_update_account_sp 
        @account_name = @AccountName,  
        @email_address = @email_address,   
        @display_name = @display_name,   
        @replyto_address = @replyto_address,  
        @description = @description,   
        @mailserver_name = @mailserver_name,   
        @mailserver_type = @mailserver_type,   
        @port = @port,   
        @timeout = @timeout,  
        @username = @username,  
        @password = @password,  
        @use_default_credentials = @use_default_credentials,  
        @enable_ssl = @enable_ssl 

ELSE

    EXECUTE msdb.dbo.sysmail_add_account_sp
        @account_name = @AccountName,  
        @email_address = @email_address,   
        @display_name = @display_name,   
        @replyto_address = @replyto_address,  
        @description = @description,   
        @mailserver_name = @mailserver_name,   
        @mailserver_type = @mailserver_type,   
        @port = @port,
        @username = @username,  
        @password = @password,  
        @use_default_credentials = @use_default_credentials,  
        @enable_ssl = @enable_ssl 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...