by Alexey Knyazev
18. февраля 2011 00:48
Пользовательские сообщения, как и системные, хранятся в системном представлении sys.messages (master..sysmessages для более ранних версий). Сообщения с идентификаторами, меньшими 50000, являются системными.
Для переноса пользовательских сообщения, написал скрипт, который динамически генерит скрипт для создания этих самых сообщений. Код работает, как для SQL Server 2000, так и выше:
use master
declare @command varchar(8000)
, @i int
, @max_error int
set @command = '/* Скрипт для переноса пользовательских сообщений */' + char(13)
+ 'use master '+ char(13)+ 'go' + char(13)
select @i = 50000, @max_error = max( error ) from sysmessages
where error > 50000
while @i <= @max_error
begin
select @command = @command
+ ' if not exists ( select * from sysmessages where error = ' + convert( varchar, error ) + ' )'
+ ' exec sp_addmessage @msgnum = ' + convert( varchar, error )
+ ', @severity = ' + convert( varchar, severity )
+ ', @with_log = ' + case dlevel when 128 then 'true' else 'false' end
+ ', @lang = ''us_english'''
+ ', @replace = ''replace'''
+ ', @msgtext = N''' + description + ''''
+ char(13)
from sysmessages
where error between @i + 1 and @i + 10
print @command
set @command = ''
set @i = @i + 10
end