Udostępnij za pomocą


FORMATMESSAGE (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

Konstruuje wiadomość z istniejącej wiadomości w sys.messages lub z podanego ciągu znaków. Funkcjonalność FORMATMESSAGE przypomina tę z instrukcji RAISERROR. Jednak RAISERROR natychmiast drukuje wiadomość, natomiast FORMATMESSAGE zwraca sformatowaną wiadomość do dalszego przetwarzania.

Transact-SQL konwencje składni

Składnia

FORMATMESSAGE ( { msg_number  | ' msg_string ' | @msg_variable} , [ param_value [ ,...n ] ] )  

Arguments

msg_number
To ID wiadomości przechowywanej w sys.messages. Jeśli msg_number = <13000 lub jeśli wiadomość nie istnieje w sys.messages, zwracany jest NULL.

msg_string
Dotyczy do: SQL Server (SQL Server 2016 (13.x) do obecnej wersji).

Jest ciągiem znaków zamkniętym w pojedynczych cudzysłowach i zawierającym zastępcze wartości parametrów. Komunikat o błędzie może mieć maksymalnie 2 047 znaków. Jeśli wiadomość zawiera 2 048 lub więcej znaków, wyświetlane są tylko pierwsze 2 044, a następnie dodana jest wielokropka wskazująca na skrócenie wiadomości. Należy zauważyć, że parametry podstawień zużywają więcej znaków niż pokazuje wynik, ze względu na zachowanie pamięci wewnętrznej. Aby uzyskać informacje o strukturze ciągu wiadomości i zastosowaniu parametrów w ciągu zobaczymy opis argumentu msg_str w RAISERROR (Transact-SQL).

@msg_variable
Dotyczy do: SQL Server (SQL Server 2016 (13.x) do obecnej wersji).

Jest zmienną nvarchar lub varchar, która zawiera ciąg spełniający powyższe kryteria msg_string .

param_value
Jest wartością parametru do wykorzystania w wiadomości. Może być więcej niż jedną wartością parametrów. Wartości muszą być określone w kolejności, w jakiej zmienne zastępcze pojawiają się w wiadomości. Maksymalna liczba wartości to 20.

Typy zwracane

nvarchar

Uwagi

Podobnie jak instrukcja RAISERROR, FORMATMESSAGE edytuje wiadomość, zastępując wartości parametrów zmiennymi zastępczymi w wiadomości. Więcej informacji o zastępczych miejscach dozwolonych w komunikatach o błędach oraz procesie edycji można znaleźć w RAISERROR (Transact-SQL).

FORMATMESSAGE wyszukuje wiadomość w aktualnym języku użytkownika. Dla komunikatów systemowych (msg_number<=50000), jeśli nie ma zlokalizowanej wersji wiadomości, używa się wersji języka operacyjnego. Dla wiadomości użytkownika (msg_number>50000), jeśli nie ma zlokalizowanej wersji wiadomości, używa się wersji angielskiej.

Dla zlokalizowanych wiadomości wartości parametrów muszą odpowiadać zastępczym parametrom w amerykańskiej wersji angielskiej. To znaczy, parametr 1 w wersji lokalnej musi odpowiadać parametrowi 1 w wersji angielskiej USA, parametr 2 musi odpowiadać parametrowi 2 i tak dalej.

Przykłady

A. Przykład z numerem wiadomości

Poniższy przykład wykorzystuje wiadomość 20009 replikacyjną zapisaną w sys.messages jako "Artykuł '%s' nie mógł zostać dodany do publikacji '%s'." FORMATMESSAGE zastępuje wartości First Variable i Second Variable za zastępcze parametrów. Powstały ciąg "Artykuł 'First Variable' could not be added to the publication 'Second Variable'" jest przechowywany w zmiennej @var1lokalnej .

SELECT text FROM sys.messages WHERE message_id = 20009 AND language_id = 1033;  
DECLARE @var1 VARCHAR(200);   
SELECT @var1 = FORMATMESSAGE(20009, 'First Variable', 'Second Variable');   
SELECT @var1;  

B. Przykład z ciągiem wiadomości

Dotyczy do: SQL Server (SQL Server 2016 (13.x) do obecnej wersji).

Poniższy przykład przyjmuje ciąg jako wejście.

SELECT FORMATMESSAGE('This is the %s and this is the %s.', 'first variable', 'second variable') AS Result;  

Zwroty: This is the first variable and this is the second variable.

C. Dodatkowe przykłady formatowania ciągów wiadomości

Poniższe przykłady pokazują różnorodne opcje formatowania.

SELECT FORMATMESSAGE('Signed int %i, %d %i, %d, %+i, %+d, %+i, %+d', 5, -5, 50, -50, -11, -11, 11, 11);
SELECT FORMATMESSAGE('Signed int with up to 3 leading zeros %03i', 5);  
SELECT FORMATMESSAGE('Signed int with up to 20 leading zeros %020i', 5);  
SELECT FORMATMESSAGE('Signed int with leading zero 0 %020i', -55);  
SELECT FORMATMESSAGE('Bigint %I64d', 3000000000);
SELECT FORMATMESSAGE('Unsigned int %u, %u', 50, -50);  
SELECT FORMATMESSAGE('Unsigned octal %o, %o', 50, -50);  
SELECT FORMATMESSAGE('Unsigned hexadecimal %x, %X, %X, %X, %x', 11, 11, -11, 50, -50);  
SELECT FORMATMESSAGE('Unsigned octal with prefix: %#o, %#o', 50, -50);  
SELECT FORMATMESSAGE('Unsigned hexadecimal with prefix: %#x, %#X, %#X, %X, %x', 11, 11, -11, 50, -50);  
SELECT FORMATMESSAGE('Hello %s!', 'TEST');  
SELECT FORMATMESSAGE('Hello %20s!', 'TEST');  
SELECT FORMATMESSAGE('Hello %-20s!', 'TEST');  

Zobacz też

RAISERROR (Transact-SQL)
RZUĆ (Transact-SQL)
sp_addmessage (Transact-SQL)
sys.messages (Transact-SQL)
CONCAT (Transact-SQL)
CONCAT_WS (Transact-SQL)
CYTAT (Transact-SQL)
ZASTĄPNIJ (Transact-SQL)
ODWRÓT (Transact-SQL)
STRING_AGG (Transact-SQL)
STRING_ESCAPE (Transact-SQL)
RZECZY (Transact-SQL)
TŁUMACZ (Transact-SQL)
Funkcje systemowe (Transact-SQL)