FORMATMESSAGE (Transact-SQL)
Форматирует сообщение на основе текста, имеющегося в sys.messages. Функция FORMATMESSAGE работает аналогично инструкции RAISERROR, но в отличие от нее не выводит сообщение немедленно, а возвращает сформированный текст для дальнейшей обработки.
Синтаксические обозначения Transact-SQL
Синтаксис
FORMATMESSAGE ( msg_number , [ param_value [ ,...n ] ] )
Аргументы
msg_number
Является идентификатором сообщения, которое хранится в sys.messages. Если параметр msg_number <= 13000 или сообщение не существует в sys.messages, то возвращается значение NULL.param_value
Значение параметра для включения в текст сообщения. Может быть указано несколько значений, при этом они должны быть перечислены в том же порядке, в котором заполнители присутствуют в сообщении. Допускается не более 20 значений.
Типы возвращаемых данных
nvarchar
Замечания
Как и инструкция RAISERROR, функция FORMATMESSAGE производит формирование сообщения, подставляя указанные значения параметров вместо заполнителей. Дополнительные сведения о заполнителях, которые допускаются в сообщении об ошибке, а также о процессе его формирования см. в разделе RAISERROR (Transact-SQL).
Она находит сообщение для текущего языка, установленного для пользователя. Если локализованная версия сообщения отсутствует, то берется версия сообщения для языка «Английский (США)».
Для локализованных сообщений указанные параметры должны соответствовать заполнителям в версиях для языка «Английский (США)». Таким образом, параметр 1 в локализованной версии должен соответствовать параметру 1 в версии для языка «Английский (США)», параметр 2 — параметру 2 и т. д.
Примеры.
В следующем примере используется сообщение репликации 20009, которое хранится в sys.messages в виде «Статью "%s" не удалось добавить в публикацию "%s".» Функция FORMATMESSAGE подставляет вместо заполнителей параметров значения First Variable и Second Variable. Результирующая строка «Статью "Первая переменная" не удалось добавить в публикацию "Вторая переменная".» сохраняется в локальной переменной @var1.
SELECT text FROM sys.messages WHERE message_id = 20009 AND language_id = 1049;
DECLARE @var1 VARCHAR(200);
SELECT @var1 = FORMATMESSAGE(20009, 'First Variable', 'Second Variable');
SELECT @var1;
См. также
Справочник
sp_addmergefilter (Transact-SQL)