快速业务通道

SQL中CASE使用

作者 佚名技术 来源 数据库编程 浏览 发布时间 2012-03-22
今天在项目中有一问题,在网上查询了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
        )

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号