다음을 통해 공유


sp_addmessage(Transact-SQL)

적용 대상: SQL Server

SQL Server 데이터베이스 엔진 인스턴스에 새 사용자 정의 오류 메시지를 저장합니다. 카탈로그 뷰를 사용하여 sp_addmessage sys.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 각 메시지가 기록되는 언어를 지정합니다. @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 버전의 경우 다른 언어를 사용하여 메시지를 추가하려면 먼저 미국 영어 버전의 메시지가 이미 있어야 합니다. 두 버전의 메시지에 대한 심각도는 일치해야 합니다.

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

원본 메시지 지역화된 메시지
Original message param 1: %s,<br />param 2: %d Localized message param 1: %1!,<br />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.
    Re-run 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. 매개 변수 순서 변경

다음 예제에서는 먼저 미국 영어로 메시지를 추가한 다음 매개 변수 순서가 변경되는 지역화된 메시지를 추가합니다. 메시지의 지역화된 버전에서 매개 변수 순서가 변경되었습니다. 문자열 매개 변수는 메시지에서 1위와 2위를 차지하고 숫자 매개 변수는 3위입니다.

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 =
        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