Sql-Server
更改 SQL 代理運算符的字元限制
我想向 SQL Agent Operators 警報添加超過 100 個字元的電子郵件地址。
例如:
emaione@example.com;emailtwo@example.com;emailthree@example.com;....
我試圖通過更改 sysoperators email_address 列來繞過 100 個字元的限制
ALTER TABLE sysoperators ALTER column email_address NVARCHAR(1000);
然後創建我的操作員,但地址仍被截斷為 100 個字元?
僅僅因為你可以並不意味著你應該。請不要應用以下更改。這個答案只是為了向您展示為什麼您不應該更改系統表或系統過程以及可能出現的問題。
msdb.dbo.sp_add_operator
使用 ssms gui 添加運算符時,
msdb.dbo.sp_add_operator
在幕後呼叫。使用的電子郵件地址參數也是
nvarchar(100)
.理論上,您可以通過更改程序來調整程序
然後將
@email_address
參數更改為nvarchar(1000)
如果我然後用 384 個字元(非 gui)執行它
USE [msdb] GO EXEC msdb.dbo.sp_add_operator @name=N'test', @enabled=1, @pager_days=0, @email_address=N'emaione@example.com;emailtwo@example.com;emailthree@example.com;emaione@example.com;emailtwo@example.com;emailthree@example.com;emaione@example.com;emailtwo@example.com;emailthree@example.com;emaione@example.com;emailtwo@example.com;emailthree@example.com;emaione@example.com;emailtwo@example.com;emailthree@example.com;emaione@example.com;emailtwo@example.com;emailthree@example.com;' GO
獲取長度:
select LEN(email_address) as email_length from sysoperators where name = 'test';
顯示有 384 個字元。
email_length 384
然而,當通過 ssms 打開它時,立即破壞的事情之一是操作員列表:
由於 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提到的分發列表將是一個更好的解決方案。