Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza 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)