注:status 是整型字段

select ff=  case when status>'6' then '大'   when status='3' then '小'  else    status     end from member

问题解决:

select ff=  case when status>'6' then '大'   when status='3' then '小'  else   CAST(status AS varchar(11))   end from member

在Sql Server 2005中,如果分支结果有int类型,默认结果是以int优先级高,所有分支结果都会自动转成int类型,status这个字段(可能是int类型),因此在返回的结果里把int类型都转成字符串类型,问题即可解决。

如果不转化,当status>'6'时,就会把'大'默认自动转换成优先级高的int类型,所以会报错。

它显示出,SQL Server试图把“Speedy Express”(nvarchar 数据类型 转换成 一个整数 ——当然,这个操作是不可能成功的。出现错误的原因 于,按照“ 数据类型 优先级”规则, CASE 表示式中最高优先级的 数据类型 决定了表达式返回 数据类型 。“ 数据类型 优先级”规则可以 SQL Server Books Online(BOL)找到,它规定了int 数据类型 的优先级要比nvarchar 数据类型 高。前面的代码要求SQL Server按照CompanyName排序输出,CompanyName是nvarchar 数据类型 。这个 CASE 表达式的返回 可能是ShipperID(int类型),可能是CompanyName(nvarchar类型),或Phone(nvarchar类型)。由于int类型具有较高的优先级,因此 CASE 表达式返回 数据类型 应该是int。


为了避免出现这种转换错误,我们可以尝试把ShipperID 转换成 varchar 数据类型 。采用这种方法之后,nvarchar 作为最高优先级的 数据类型 被返回。Listing 3显示了修改后的GetSortedShippers存储过程。

文章出处:http://www.itkeyword.com/doc/8295956035150524542/SQL-Cache-SQL-Server