你意想不到的输出

最近在做存储过程开发的时候,遇到一个问题,我相信90%的人第一次都会出错,比如对于下面的例子:

declare @type int

set @type = 1

select

  case

    when @type = 1 then '-'

    else 0

  end

 

我最初的意图是,当@type的值为1的时候,就输出一个dash符号‘-’,而当@type为其他值的时候,就直接输出0.

我相信,到这里,90%以上的人认为以上查询的输出结果为'-'. 但是当你运行以上查询的时候,你会惊奇的发现结果不是dash,哈哈。

 

正确答案是0. Oh my god, 为什么会是0, 难道SQL Server的case语句有严重的bug?我不敢相信。

后来才发现,是因为数据类型的原因。int类型的优先级比varchar类型高,所以当@type = 1的时候,dash符号被看成了负号,进而被转换成了0. 要想得到正确的结果,把int类型改成varchar类型就OK了,如下:

 

declare @type int

set @type = 1

select

  case

    when @type = 1 then '-'

    else ‘0’

  end

 

我又学了一招。。。。。

 

posted on 2012-03-24 12:41  TomXie  阅读(117)  评论(0)    收藏  举报

导航