SQL中CASE使用

 今天在項目中有一問題,在網上查詢了case的用法,帖出來和大家分享下。
 問題描述:在一張表中有一字段bit類型,表示此條數據是否被鎖定,在頁面上有一按鈕是對此條數據進行鎖定和解鎖的,選擇頁面中的數據,點擊這個按鈕,如果這條數據是鎖定的,就解鎖;如果是未說定的就鎖定,這樣就用一條語句來實現。後來想到以前使用過sql中的case語句能實現這種功能。查詢了一下,果然好用,呵呵.....


CASE


計算條件列表並返回多個可能結果表達式之一。

 

CASE 具有兩種格式:

 

簡單 CASE 函數將某個表達式與一組簡單表達式進行比較以確定結果。


CASE 搜索函數計算一組布爾表達式以確定結果。
兩種格式都支持可選的 ELSE 參數。

語法
簡單 CASE 函數:

CASE input_expression
    WHEN when_expression THEN result_expression
        [ ...n ]
    [
        ELSE else_result_expression
    END

CASE 搜索函數:

CASE
    WHEN Boolean_expression THEN result_expression
        [ ...n ]
    [
        ELSE else_result_expression
    END


參數


input_expression

是使用簡單 CASE 格式時所計算的表達式。Input_expression 是任何有效的 Microsoft? SQL Server? 表達式。

WHEN when_expression

使用簡單 CASE 格式時 input_expression 所比較的簡單表達式。When_expression 是任意有效的 SQL Server 表達式。Input_expression 和每個 when_expression 的數據類型必須相同,或者是隱性轉換。

n

佔位符,表明可以使用多個 WHEN when_expression THEN result_expression 子句或 WHEN Boolean_expression THEN result_expression 子句。

THEN result_expression

當 input_expression = when_expression 取值爲 TRUE,或者 Boolean_expression 取值爲 TRUE 時返回的表達式。result expression 是任意有效的 SQL Server 表達式。

ELSE else_result_expression

當比較運算取值不爲 TRUE 時返回的表達式。如果省略此參數並且比較運算取值不爲 TRUE,CASE 將返回 NULL 值。Else_result_expression 是任意有效的 SQL Server 表達式。Else_result_expression 和所有 result_expression 的數據類型必須相同,或者必須是隱性轉換。

WHEN Boolean_expression

使用 CASE 搜索格式時所計算的布爾表達式。Boolean_expression 是任意有效的布爾表達式。

結果類型
從 result_expressions 和可選 else_result_expression 的類型集合中返回最高的優先規則類型。有關更多信息,請參見數據類型的優先順序。


以上是sql server幫助中的關於case的信息,下面來一個實例幫助理解:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[db_case_user]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[db_case_user]
GO

CREATE TABLE [dbo].[db_case_user] (
 [id] [int] IDENTITY (1, 1) NOT NULL ,
 [name] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
 [lock] [bit] NULL
) ON [PRIMARY]
GO

insert into db_case_user (name, lock) values ('張三', 0)
insert into db_case_user (name, lock) values ('李四', 1)
insert into db_case_user (name, lock) values ('王五', 0)
insert into db_case_user (name, lock) values ('趙六', 0)


現在更新數據庫中所有人的lock字段,lock爲0的更新成1,爲1的更新成0。

update db_case_user
  set lock=(
   CASE lock
    WHEN 1 THEN 0
    WHEN 0 THEN 1
   END
        )

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章