SqlServer中的if判断

编写过sql语句或者存储过程的朋友们对IF ELSE语句可能都很熟悉,它是用来对过程进行控制的。
在SQL的世界中CASE语句语句有类似的效果。下面简单的介绍CASE语句的用法。
考虑下面的情况,假设有个user表,定义如下:

CREATE TABLE USER 

NAME VARCHAR(20) NOT NULL,—姓名 
SEX INTEGER,—性别(1、男 2、女) 
BIRTHDAY DATE—生日 
); 
CREATE TABLE USER
(
NAME VARCHAR(20) NOT NULL,—姓名
SEX INTEGER,—性别(1、男 2、女)
BIRTHDAY DATE—生日
);

CASE使用场合1:把user表导出生成一个文件,要求性别为男或女,而不是1和2,怎么办?我们可以用如下的语句处理:

SELECT 
NAME, 
CASE SEX 
WHEN 1 THEN ‘男’ 
ELSE ‘女’ 
END AS SEX, 
BIRTHDAY 
FROM USER; 
SELECT 
NAME,
CASE SEX
WHEN 1 THEN ‘男’
ELSE ‘女’
END AS SEX,
BIRTHDAY
FROM USER;

CASE使用场合2:假设user目前没有值,然后你往user导入了一批数据,但是很不幸,错把男设置成为2,而把女设置成为1,现在要求你变换过来,怎么办?

方法1:使用CASE语句

UPDATE USER SET SEX= 

CASE SEX 
WHEN 1 THEN 2 
WHEN 2 THEN 1 
ELSE SEX 
END 
); 
UPDATE USER SET SEX=
(
CASE SEX
WHEN 1 THEN 2
WHEN 2 THEN 1
ELSE SEX
END
);
方法2:使用三条语句,先把2更新成3,接着把1更新成2,最后把3更新成1,很麻烦,不是吗?

UPDATE USER SET SEX=3 WHERE SEX=2; 
UPDATE USER SET SEX=1 WHERE SEX=3; 
UPDATE USER SET SEX=2 WHERE SEX=1; 
UPDATE USER SET SEX=3 WHERE SEX=2;
UPDATE USER SET SEX=1 WHERE SEX=3;
UPDATE USER SET SEX=2 WHERE SEX=1;

细心的朋友可能已经发现了,上面的方法1的三条语句的执行顺序有问题,没错,是我故意那些写的,仅仅是把1变成2,把2变成1就那么麻烦,而且很容易出错,想象一下,如果有很多这样的值需要变换,那是一种什么样的情况。还好,我们有CASE语句,有好多这样的值需要变换,CASE语句也不会存在问题。可能有些朋友还是有疑虑,这样做会不会死循环啊?哈哈,想法很好,如果你发现这样做会死循环,一定要告诉IBM,我反正没发现。

http://blog.sina.com.cn/s/blog_79d749c60101l8wd.html

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。