web-dev-qa-db-ja.com

SQLエージェントオペレーターの文字制限を変更する

SQLエージェントオペレーターのアラートに100文字以上の電子メールアドレスを追加したい。

例えば: [email protected];[email protected];[email protected];....

Sysoperatorsのemail_address列を変更することで、100文字の制限を回避しようとしました

ALTER TABLE sysoperators
ALTER column email_address NVARCHAR(1000);

それから私のオペレーターを作成しましたが、アドレスはまだ100文字でカットされていますか?

4
jack

あなたができるからといって、あなたがそうすべきだという意味ではありません。以下の変更は適用しないでください。この回答は、システムテーブルやシステムプロシージャを変更してはならない理由と、問題が発生する可能性がある理由を示すためのものです。

msdb.dbo.sp_add_operator

Ssms guiでオペレーターを追加すると、_msdb.dbo.sp_add_operator_がバックグラウンドで呼び出されます。

使用される電子メールアドレスパラメータもnvarchar(100)です。

enter image description here

理論的には、手順を変更することで手順を適合させることができます

そして、_@email_address_パラメータをnvarchar(1000)に変更します

enter image description here

次に384文字(非GUI)で実行した場合

_USE [msdb]
GO
EXEC msdb.dbo.sp_add_operator @name=N'test', 
        @enabled=1, 
        @pager_days=0, 
        @email_address=N'[email protected];[email protected];[email protected];[email protected];[email protected];[email protected];[email protected];[email protected];[email protected];[email protected];[email protected];[email protected];[email protected];[email protected];[email protected];[email protected];[email protected];[email protected];'
GO
_

長さを取得する:

_select LEN(email_address)  as email_length
from sysoperators 
where name = 'test';
_

384文字あることを示しています。

_email_length
384
_

ただし、ssmsを介して開くと、すぐに壊れる演算子の1つが演算子リストです。

enter image description here

このクエリを実行するssmsのため:

_create table #tmp_sp_help_operator
(id int null, name nvarchar(128) null, enabled tinyint null, email_address nvarchar(100) null, last_email_date int null, last_email_time int null, pager_address nvarchar(100) null, last_pager_date int null, last_pager_time int null, weekday_pager_start_time int null, weekday_pager_end_time int null, saturday_pager_start_time int null, saturday_pager_end_time int null, sunday_pager_start_time int null, sunday_pager_end_time int null, pager_days tinyint null, netsend_address nvarchar(100) null, last_netsend_date int null, last_netsend_time int null, category_name nvarchar(128) null)
insert into #tmp_sp_help_operator exec msdb.dbo.sp_help_operator



SELECT
tsho.name AS [Name],
'Server[@Name=' + quotename(CAST(
        serverproperty(N'Servername')
       AS sysname),'''') + ']' + '/JobServer' + '/Operator[@Name=' + quotename(tsho.name,'''') + ']' AS [Urn],
CAST(tsho.enabled AS bit) AS [Enabled]
FROM
#tmp_sp_help_operator AS tsho
ORDER BY
[Name] ASC

drop table #tmp_sp_help_operator
_

システムテーブルとプロシージャでしない必要がある理由を示します。

テーブルと手順を変更したときに何が機能し、何が機能しなくなるかは誰にもわかりません。

vonPryz のような配布リストは、はるかに優れたソリューションになります。

8
Randi Vertongen