Поделиться через


sp_addmergefilter (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

Идентификатор сообщения. @msgnum имеет значение int с значением по умолчаниюNULL. @msgnum для сообщений об ошибках, определенных пользователем, может быть целым числом от 50 001 до 2 147 483 647. Сочетание @msgnum и @lang должно быть уникальным; возвращается ошибка, если идентификатор уже существует для указанного языка.

[ @severity = ] серьезность

Уровень серьезности ошибки. @severity имеет небольшой размер с значением по умолчаниюNULL. Допустимые уровни находятся в том 1 же режиме 25. Дополнительные сведения о серьезности см. в разделе ядро СУБД серьезности ошибок.

[ @msgtext = ] N'msgtext'

Текст сообщения об ошибке. @msgtext — nvarchar(255) с значением по умолчаниюNULL.

[ @lang = ] N'lang'

Язык для этого сообщения. @lang — sysname с значением по умолчаниюNULL. Так как на одном сервере можно установить несколько языков, @lang указывает язык, на котором записывается каждое сообщение. Если @lang опущен, язык является языком по умолчанию для сеанса.

[ @with_log = ] 'with_log'

Указывает, нужно ли записывать сообщение в журнал приложений Windows при его возникновении. @with_log — varchar(5) с значением по умолчаниюNULL.

  • Если trueошибка всегда записывается в журнал приложений Windows.
  • Если falseошибка не всегда записывается в журнал приложений Windows, но может быть записана в зависимости от способа возникновения ошибки.

Этот параметр может использовать только члены роли сервера sysadmin .

Если сообщение записывается в журнал приложений Windows, оно также записывается в файл журнала ошибок ядро СУБД.

[ @replace = ] 'replace'

Если указана строка @replace, существующее сообщение об ошибке перезаписывается новым текстом сообщения и уровнем серьезности. @replace — varchar(7) с значением по умолчаниюNULL. Этот параметр необходимо указать, если @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 .

Примеры

А. Определение настраиваемого сообщения

В следующем примере добавляется настраиваемое сообщение 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. Изменение порядка отображения параметров

В следующем примере сначала создается сообщение на английском языке, а затем добавляется локализованное сообщение с измененным порядком параметров. В локализованной версии сообщения порядок параметров изменился. Строковые параметры находятся в первом и втором месте в сообщении, а числовый параметр — третье место.

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