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.

Topic link iconKonwencje składni języka Transact-SQL

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.