首页 > 数据库 > SQL Server > 正文

SQL中CASE使用

2019-11-03 08:36:06
字体:
来源:转载
供稿:网友
今天在项目中有一问题,在网上查询了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
        )
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表