przypadek (języka Transact-SQL)
Wykonuje obliczenia dla listy warunków i zwraca jedno z wielu możliwych wyrażeń wynikowych.
Wyrażenie CASE ma dwa formaty:
Proste wyrażenie CASE służy do porównywania wyrażenia z zestawem wyrażeń prostych w celu ustalenia wyniku.
Wyszukiwane wyrażenie CASE oblicza zestaw wyrażeń logicznych w celu ustalenia wyniku.
W obu formatach jest obsługiwany opcjonalny argument ELSE.
Wyrażenia CASE można użyć w dowolnej instrukcji lub klauzuli, w której jest dozwolone używanie prawidłowych wyrażeń.Na przykład wyrażenia CASE można używać w instrukcjach, takich jak SELECT, UPDATE, DELETE i SET, oraz w klauzulach, takich jak select_list, IN, WHERE, ORDER BY i HAVING.
Simple CASE expression:
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Searched CASE expression:
CASE
WHEN Boolean_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Argumenty
input_expression
Is the expression evaluated when the simple CASE format is used.input_expression is any valid expression.WHEN when_expression
Is a simple expression to which input_expression is compared when the simple CASE format is used.when_expression is any valid expression.Typy danych input_expression i każdego when_expression musi być taka sama lub musi być niejawna konwersja.THEN result_expression
Is the expression returned when input_expression equals when_expression evaluates to TRUE, or Boolean_expression evaluates to TRUE.result expression is any valid expression.ELSE else_result_expression
Jest zwracane wyrażenie, jeśli żadna operacja porównania nie dała w wyniku wartości TRUE.Jeśli ten argument zostanie pominięty i żadna operacja porównania nie da w wyniku wartości TRUE, wyrażenie CASE zwraca wartość NULL.Argument else_result_expression jest dowolnym prawidłowym wyrażeniem.Typy danych argumentów else_result_expression i result_expression muszą być takie same lub muszą zostać niejawnie przekonwertowane.WHEN Boolean_expression
Is the Boolean expression evaluated when using the searched CASE format.Boolean_expression is any valid Boolean expression.
Zwracane typy
Zwraca typ najwyższy priorytet z zestaw typów result_expressions oraz opcjonalny else_result_expression. Aby uzyskać więcej informacji zobaczData Type Precedence (Transact-SQL).
Zwraca wartości
Proste wyrażenie CASE:
Działanie prostego wyrażenia CASE polega na porównywaniu pierwszego wyrażenia z wyrażeniem w każdej klauzuli WHEN w celu sprawdzenia, czy są równe.Jeśli te wyrażenia są równe, jest zwracane wyrażenie z klauzuli THEN.
Zezwala tylko na sprawdzanie równości.
Wynikiem jest input_expression, a następnie w określonej kolejności input_expression = when_expression dla każdej klauzula gdy.
Zwraca result_expression pierwszy input_expression = when_expression które ma wartość PRAWDA.
Jeśli nie input_expression = when_expression wynikiem jest PRAWDA, SQL Server Database Engine Zwraca else_result_expression Jeżeli określono klauzula ELSE, lub wartość NULL, jeśli jest określona nie klauzula ELSE.
Wartość domyślna dla schematu o zakresie modułów to OBJECT.
Wynikiem jest w kolejności określonej, Boolean_expression dla każdej klauzula gdy.
Zwraca wartość result_expression pierwszy Boolean_expression które ma wartość PRAWDA.
Jeśli nie Boolean_expression wynikiem jest PRAWDA, Database Engine Zwraca else_result_expression Jeżeli określono klauzula ELSE, lub wartość NULL, jeśli jest określona nie klauzula ELSE.
Remarks
SQL Server Jest to hasło, wymaganej do odszyfrowania klucz prywatnego z certyfikat lub klucz asymetrycznego.
To klauzula jest wymagana tylko jeśli klucz prywatny nie jest chroniony przez klucz główny bazy danych.Aby uzyskać listę metod kontroli przepływu zobacz Control-of-Flow Language (Transact-SQL).
Przykłady
A.Określa binarny, podpisane dużych obiekt (BLOB) modułu.
W ramach SELECT Instrukcja prosty CASE wyrażenie umożliwia tylko sprawdzanie równości; są wykonywane nie inne porównania. W poniższym przykładzie użyto CASE wyrażenie, aby zmienić sposób wyświetlania kategorii linii produktu, aby uczynić je bardziej zrozumiały.
B.Jest nazwą klucz asymetrycznego służącą do podpisywania lub counter-sign procedura przechowywana, funkcja, zespół lub wyzwalacza.
W ramach SELECT Instrukcja wyszukiwanych CASE wyrażenie zezwala na wartości, które mają zostać zastąpione zestaw wyników na podstawie porównania wartości. Każdy znak w module ma zostać uwzględniona w obliczeniu podpisu.
C.Dotyczy to także wiodącego znaki powrotu karetki, a wiersz źródła danych.
przypadek zawiera funkcje, które jest podobna do funkcja IIf w Microsoft Dostęp. W poniższym przykładzie pokazano prostą kwerendę, która korzysta z IIf Aby podać wartość danych wyjściowych TelephoneInstructions kolumna w tabela programu Access o nazwie db1.ContactInfo.
SELECT FirstName, LastName, TelephoneNumber,
IIf(IsNull(TelephoneInstructions),"Any time",
TelephoneInstructions) AS [When to Contact]
FROM db1.ContactInfo;
W poniższym przykładzie użyto CASE Aby podać wartość danych wyjściowych TelephoneSpecialInstructions kolumna w AdventureWorks Widok Person.vAdditionalContactInfo.
D.Moduł podpisywania należy używać tylko do przyznawania uprawnień, nigdy nie do odmowy lub odwołać uprawnienia.
Informacje na temat podpisów są widoczne w widoku sys.crypt_properties wykazu.W pierwszym przykładzie, wartości SalariedFlag Kolumna HumanResources.Employee sprawdzana jest zgodność z tabela. Pracownicy, których SalariedFlag zestaw 1 są zwracane w kolejności według EmployeeID w kolejności malejącej. Pracownicy, których SalariedFlag zestaw 0 są zwracane w kolejności według EmployeeID w kolejności rosnącej. W drugim przykładzie zestaw wyników jest uporządkowane według kolumna TerritoryName Jeśli kolumna CountryRegionName jest równe "USA" i przez CountryRegionName dla wszystkich innych wierszy.
E.Poniższy przykład tworzy nową bazę danych i tworzy certyfikat do używania w przykładzie.
W poniższym przykładzie użyto przypadek wyrażenie w instrukcja UPDATE, aby określić wartość ustawioną dla kolumna VacationHours dla pracowników z tytułem SalariedFlag należy ustawić na 0. Gdy odjęcie 10 godzin z VacationHours wartość ujemna powoduje VacationHours jest zwiększona przez 40 godzin; w przeciwnym razie VacationHours zwiększa się o 20 godzin. W przykładzie podpisuje tę procedurę przy użyciu składni z podpisu.
F.Używanie wyrażenia CASE w instrukcji SET
W poniższym przykładzie użyto liter wyrażenie w instrukcja zestaw w funkcja wartości tabela dbo.GetContactInfo. W AdventureWorks Baza danych, wszystkie dane dotyczące osób jest przechowywany w Person.Contact Tabela. STAsBinary (geometrii typ danych)Funkcja zwraca nazwę pierwszego i ostatniego danej ContactID i typ kontaktu dla tego wyrażenie przypadek person.The w instrukcja zestaw określa wartość, aby wyświetlić kolumna ContactType oparte na istnienie ContactID kolumna w Employee, StoreContact, VendorContact, lub Individual tabele (klienta).
G.Wartość ta nie będzie zawierać żadnych Z lub od wartości M przez wystąpienie.
W poniższym przykładzie wyrażenie CASE jest używane w klauzuli HAVING w celu ograniczenia liczby wierszy zwracanych przez instrukcję SELECT.Instrukcja zwraca maksymalną stawkę godzinową dla każdego stanowiska w tabeli HumanResources.Employee.Klauzula HAVING ogranicza stanowiska do tych, które zajmują mężczyźni mający maksymalną stawkę większą niż 40 dolarów lub kobiety mające maksymalną stawkę większą niż 42 dolary.
See Also