sp_addmessage(Transact-SQL)
새 사용자 정의 오류 메시지를 SQL Server 데이터베이스 엔진 인스턴스에 저장합니다. sp_addmessage를 사용하여 저장한 메시지는 sys.messages 카탈로그 뷰를 사용하여 볼 수 있습니다.
구문
sp_addmessage [ @msgnum= ] msg_id , [ @severity= ] severity , [ @msgtext= ] 'msg'
[ , [ @lang= ] 'language' ]
[ , [ @with_log= ] { 'TRUE' | 'FALSE' } ]
[ , [ @replace= ] 'replace' ]
인수
[ @msgnum= ] msg_id
메시지의 ID입니다. msg_id는 int이며 기본값은 NULL입니다. 사용자 정의 오류 메시지의 msg_id는 50,001과 2,147,483,647 사이의 정수로 지정할 수 있습니다. msg_id와 language 조합은 고유해야 합니다. 따라서 지정된 언어의 ID가 이미 있을 경우 오류가 반환됩니다.[ @severity = ]severity
오류의 심각도입니다. severity는 smallint이며 기본값은 NULL입니다. 유효한 수준은 1에서 25까지입니다. 심각도에 대한 자세한 내용은 데이터베이스 엔진 오류 심각도를 참조하십시오.[ @msgtext = ] 'msg'
오류 메시지의 텍스트입니다. msg는 nvarchar(255)이며 기본값은 NULL입니다.[ @lang = ] 'language'
메시지에 사용할 언어입니다. language는 sysname이며 기본값은 NULL입니다. 한 서버에 여러 언어가 지원되므로 language는 각 메시지 작성에 사용된 언어를 지정합니다. language가 생략된 경우에는 해당 세션의 기본 언어가 사용됩니다.[ @with_log = ] { 'TRUE' | 'FALSE' }
오류가 발생할 때 Windows 응용 프로그램 로그에 기록할지 여부입니다. @with_log는 varchar(5)이며 기본값은 FALSE입니다. TRUE인 경우 오류가 항상 Windows 응용 프로그램 로그에 기록됩니다. FALSE인 경우 오류가 항상 Windows 응용 프로그램 로그에 기록되지는 않으며 오류가 어떻게 발생했는지에 따라 달라집니다. sysadmin 서버 역할의 멤버만 이 옵션을 사용할 수 있습니다.[!참고]
Windows 응용 프로그램 로그에 메시지가 기록된 경우에는 데이터베이스 엔진 오류 로그 파일에도 기록됩니다.
[ @replace = ] 'replace'
replace 문자열로 지정된 경우 기존의 오류 메시지를 새 메시지 텍스트와 심각도로 덮어씁니다. replace는 varchar(7)이며 기본값은 NULL입니다. msg_id가 이미 존재하는 경우에는 반드시 이 옵션을 지정해야 합니다. 영어(미국)로 작성된 메시지를 대체한 경우에는 동일한 msg_id를 가진 다른 언어로 작성된 모든 메시지의 심각도가 대체됩니다.
반환 코드 값
0(성공) 또는 1(실패)
결과 집합
없음
주의
영어 버전이 아닌 SQL Server의 경우 영어(미국) 버전의 메시지가 이미 존재하고 있어야 다른 언어를 사용하여 메시지를 추가할 수 있습니다. 두 버전의 메시지에 대한 심각도는 일치해야 합니다.
매개 변수를 포함한 메시지를 지역화하는 경우에는 원래 메시지의 매개 변수와 일치하는 매개 변수 번호를 사용하십시오. 각 매개 변수 번호 뒤에는 느낌표(!)를 삽입하십시오.
원래 메시지 |
지역화된 메시지 |
---|---|
'원래 메시지 param 1: %s, param 2: %d’, |
'지역화된 메시지 param 1: %1!, param 2: %2!' |
언어 구문이 다르므로 지역화된 메시지의 매개 변수 번호 순서가 원래 메시지의 경우와 다를 수 있습니다.
사용 권한
sysadmin 및 serveradmin 고정 서버 역할의 멤버 자격이 필요합니다.
예
1. 사용자 지정 메시지 정의
다음 예에서는 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
2. 두 언어로 작성된 메시지 추가
다음 예에서는 영어(미국)로 된 메시지를 먼저 추가한 다음 동일한 메시지를 프랑스어로 추가합니다.
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
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 =
-- 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') -- error, severity, state,
GO -- parameters.
-- Changing the session language to use the German
-- version of the error message.
SET LANGUAGE German;
GO
RAISERROR(60000,1,1,15,'param1','param2') -- error, severity, state,
GO -- parameters.