注: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