Script pour créer un script de création et manutention de messages d’erreur.
Il y a de scripts sur l’internet qui peut vous aider, mais ces scripts ne sont pas “Safe to run”.
Sources :
https://msdn.microsoft.com/en-us/library/ms178649.aspx
http://sqlmag.com/blog/migrating-custom-error-messages-between-servers
1
2PRINT '------------------------------------'
3PRINT '-- Script to update/add SysMessages'
4PRINT '--'
5PRINT '-- Date :' + cast(GETDATE() as nvarchar(max))
6PRINT '-- Source :' + @@servername
7PRINT '------------------------------------'
8
9SET NOCOUNT ON;
10DECLARE @crlf CHAR(2);
11DECLARE @tab CHAR(1);
12DECLARE @sql NVARCHAR(MAX);
13DECLARE @sqlResult NVARCHAR(MAX);
14SET @crlf = CHAR(13) + CHAR(10);
15SET @tab = CHAR(9);
16
17SET @sql = '
18IF (EXISTS (
19 SELECT M.message_id, M.language_id, M.severity, M.is_event_logged, M.text
20 FROM sys.messages AS M INNER JOIN sys.syslanguages AS L ON M.language_id = L.lcid
21 WHERE (M.message_id = [*msgnum*]) AND (M.text = [*msgtext*]) AND (L.name = [*lang*])
22))
23BEGIN
24 PRINT ''-- Message exists [*msgnum*] ('' + [*lang*] + '') : '' + [*msgtext*];
25END
26ELSE
27BEGIN
28 IF (EXISTS (
29 SELECT M.message_id, M.language_id, M.severity, M.is_event_logged, M.text
30 FROM sys.messages AS M INNER JOIN sys.syslanguages AS L ON M.language_id = L.lcid
31 WHERE (M.message_id = [*msgnum*]) AND (L.name = [*lang*])
32 ))
33 BEGIN
34 PRINT ''-- Update message [*msgnum*] ('' + [*lang*] + '') : '' + [*msgtext*];
35 EXEC sp_dropmessage @msgnum = [*msgnum*], @lang = [*lang*];
36 END
37 PRINT ''-- Add new message [*msgnum*] ('' + [*lang*] + '') : '' + [*msgtext*];
38 EXEC sp_addmessage @msgnum = [*msgnum*], @severity = [*severity*], @msgtext = [*msgtext*], @lang = [*lang*], @with_log = [*with_log*];
39END;
40
41-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
42';
43
44DECLARE @msgnum NVARCHAR(50);
45DECLARE @severity NVARCHAR(50);
46DECLARE @msgtext NVARCHAR(2048)
47DECLARE @lang NVARCHAR(50);
48DECLARE @with_log NVARCHAR(50);
49
50BEGIN TRY drop table #message; END TRY BEGIN CATCH END CATCH;
51SELECT M.message_id AS msgnum
52 ,M.severity
53 ,M.TEXT AS msgtext
54 ,L.NAME AS lang
55 ,CASE WHEN M.is_event_logged = 1 THEN 'TRUE' ELSE 'FALSE' END AS with_log
56INTO [#message]
57FROM sys.messages AS M
58INNER JOIN sys.syslanguages AS L ON M.language_id = L.lcid
59WHERE (M.message_id > 50000);
60WHILE (exists(select * from #message))
61BEGIN
62
63 select TOP 1 @msgnum = msgnum, @severity = severity, @msgtext = msgtext, @lang = lang, @with_log = with_log from #message
64 Delete from #message where @msgnum = msgnum AND @lang = lang;
65
66 SET @sqlResult = @sql;
67 SET @sqlResult = REPLACE(@sqlResult, '[*msgnum*]', @msgnum);
68 SET @sqlResult = REPLACE(@sqlResult, '[*severity*]', @severity);
69 SET @msgtext = ''''+REPLACE(@msgtext, '''', '''''''')+'''';
70 SET @sqlResult = REPLACE(@sqlResult, '[*msgtext*]', @msgtext);
71 SET @lang = ''''+REPLACE(@lang, '''', '''''''')+'''';
72 SET @sqlResult = REPLACE(@sqlResult, '[*lang*]', @lang);
73 SET @with_log = ''''+REPLACE(@with_log, '''', '''''''')+'''';
74 SET @sqlResult = REPLACE(@sqlResult, '[*with_log*]', @with_log);
75 PRINT @sqlResult;
76
77END
Comments