今天在項目中有一問題,在網上查詢了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
)