sp_addmessage(Transact-SQL)

적용 대상:SQL Server

SQL Server 데이터베이스 엔진 인스턴스에 새 사용자 정의 오류 메시지를 저장합니다. 카탈로그 뷰를 사용하여 sp_addmessagesys.messages 저장된 메시지를 볼 수 있습니다.

Transact-SQL 구문 표기 규칙

구문

sp_addmessage
    [ [ @msgnum = ] msgnum ]
    [ , [ @severity = ] severity ]
    [ , [ @msgtext = ] N'msgtext' ]
    [ , [ @lang = ] N'lang' ]
    [ , [ @with_log = ] { 'true' | 'false' } ]
    [ , [ @replace = ] 'replace' ]
[ ; ]

인수

[ @msgnum = ] msgnum

메시지의 ID입니다. @msgnum 기본값NULL인 int입니다. 사용자 정의 오류 메시지의 @msgnum 50,001에서 2,147,483,647 사이의 정수가 될 수 있습니다. @msgnum 및 @lang 조합은 고유해야 합니다. 지정된 언어에 대한 ID가 이미 있는 경우 오류가 반환됩니다.

[ @severity = ] 심각도

오류의 심각도 수준입니다. @severity 기본값NULL인 smallint입니다. 유효한 수준은 을 통해25서입니다1. 심각도에 대한 자세한 내용은 데이터베이스 엔진 오류 심각도를 참조하세요.

[ @msgtext = ] N'msgtext'

오류 메시지 텍스트입니다. @msgtext 기본값NULL인 nvarchar(255)입니다.

[ @lang = ] N'lang'

@lang sysname이며 기본값은 .입니다NULL.

이 메시지의 언어입니다. @lang 기본값NULL인 sysname입니다. 여러 언어를 동일한 서버에 설치할 수 있으므로 @lang 각 메시지가 기록되는 언어를 지정합니다. @lang 생략하면 해당 언어가 세션의 기본 언어입니다.

[ @with_log = ] 'with_log'

메시지가 발생할 때 Windows 애플리케이션 로그에 쓸지 여부를 지정합니다. @with_log 기본값NULL인 varchar(5)입니다.

  • 이 경우 true오류는 항상 Windows 애플리케이션 로그에 기록됩니다.
  • 이 경우 false오류가 항상 Windows 애플리케이션 로그에 기록되지는 않지만 오류가 발생한 방식에 따라 작성할 수 있습니다.

sysadmin 서버 역할의 멤버만 이 옵션을 사용할 수 있습니다.

메시지가 Windows 애플리케이션 로그에 기록되는 경우 데이터베이스 엔진 오류 로그 파일에도 기록됩니다.

[ @replace = ] 'replace'

문자열 @replace 지정하면 기존 오류 메시지를 새 메시지 텍스트 및 심각도 수준으로 덮어씁니다. @replace 기본값NULL인 varchar(7)입니다. @msgnum 이미 있는 경우 이 옵션을 지정해야 합니다. 미국 영어 메시지를 바꾸면 @msgnum 동일한 다른 모든 언어의 모든 메시지에 대해 심각도 수준이 바뀝니다.

반환 코드 값

0 (성공) 또는 1 (실패).

결과 집합

없음.

설명

영어가 아닌 SQL Server 버전의 경우 다른 언어를 사용하여 메시지를 추가하려면 먼저 미국 영어 버전의 메시지가 이미 있어야 합니다. 두 버전의 메시지에 대한 심각도는 일치해야 합니다.

매개 변수가 포함된 메시지를 지역화할 때는 원본 메시지의 매개 변수에 해당하는 매개 변수 번호를 사용합니다. 각 매개 변수 번호 뒤에 느낌표(!)를 삽입합니다.

원본 메시지 지역화된 메시지
'원본 메시지 매개 변수 1: %s,
param 2: %d'
'지역화된 메시지 매개 변수 1: %1!,
param 2: %2!'

언어 구문 차이로 인해 지역화된 메시지의 매개 변수 번호는 원래 메시지와 동일한 순서로 발생하지 않을 수 있습니다.

사용 권한

sysadmin 또는 serveradmin 고정 서버 역할의 멤버 자격이 필요합니다.

예제

A. 사용자 지정 메시지 정의

다음 예제에서는 사용자 지정 메시지를 추가합니다 sys.messages.

USE master;
GO
EXEC sp_addmessage 50001, 16,
    N'Percentage expects a value between 20 and 100.
    Please reexecute with a more appropriate value.';
GO

B. 두 언어로 메시지 추가

다음 예제에서는 먼저 미국 영어로 메시지를 추가한 다음 프랑스어로 동일한 메시지를 추가합니다.

USE master;
GO
EXEC sp_addmessage @msgnum = 60000, @severity = 16,
   @msgtext = N'The item named %s already exists in %s.',
   @lang = 'us_english';

EXEC sp_addmessage @msgnum = 60000, @severity = 16,
   @msgtext = N'L''élément nommé %1! existe déjà dans %2!',
   @lang = 'French';
GO

C. 매개 변수 순서 변경

다음 예제에서는 먼저 미국 영어로 메시지를 추가한 다음 매개 변수 순서가 변경되는 지역화된 메시지를 추가합니다.

USE master;
GO

EXEC sp_addmessage
    @msgnum = 60000,
    @severity = 16,
    @msgtext =
        N'This is a test message with one numeric
        parameter (%d), one string parameter (%s),
        and another string parameter (%s).',
    @lang = 'us_english';

EXEC sp_addmessage
    @msgnum = 60000,
    @severity = 16,
    @msgtext =
        -- In the localized version of the message,
        -- the parameter order has changed. The
        -- string parameters are first and second
        -- place in the message, and the numeric
        -- parameter is third place.
        N'Dies ist eine Testmeldung mit einem
        Zeichenfolgenparameter (%3!),
        einem weiteren Zeichenfolgenparameter (%2!),
        und einem numerischen Parameter (%1!).',
    @lang = 'German';
GO

-- Changing the session language to use the U.S. English
-- version of the error message.
SET LANGUAGE us_english;
GO

RAISERROR(60000, 1, 1, 15, 'param1', 'param2')
GO

-- Changing the session language to use the German
-- version of the error message.
SET LANGUAGE German;
GO

RAISERROR(60000, 1, 1, 15, 'param1', 'param2');
GO