关于sql server case when ..else ..end结果类型的小议
2009-10-15 14:07
543 查看
这个问题源于csdn一贴子,后来发现sql server各版本对这个case when else end结果的处理不尽相同。。
CASE语法如下:
declare @T Table (id char(10))
insert into @T select '1'
insert into @T select '2'
insert into @T select '3'
--显示指定结果为char类型,长度为10,可以看到case后的result类型为char,没有变化。
select case id when '3'Then cast('' as char(10)) else id end as Id,
SQL_VARIANT_PROPERTY((case id when '3'Then cast('' as char(10)) else id end),'BaseType') as CaseResultType,
case id when '3'Then DataLength(cast('' as char(10))) else DataLength(ID) end as IDDataLength
from @T
--不显示指定类型,那么''则为varchar型,根据联机文档case的result类型优先级varchar优先char,
--可以看到case后的result类型为varchar。
select case id when '3'Then '' else id end as Id,
SQL_VARIANT_PROPERTY((case id when '3'Then '' else id end),'BaseType') as CaseResultType,
case id when '3'Then DataLength('') else DataLength(ID) end as IDDataLength
from @T
--不显示指定类型,那么4则为int型,根据联机文档case的result类型优先级int优先char,
--可以看到case后的result类型为int型,但存储大小不全是4。
select case id when '3'Then 4 else id end as Id,
SQL_VARIANT_PROPERTY((case id when '3'Then 4 else id end),'BaseType') as CaseResultType,
case id when '3'Then DataLength(4) else DataLength(ID) end as IDDataLength
from @T
/**//*
Id CaseResultType IDDataLength
1 int 10
2 int 10
4 int 4
*/
我以上的测试环境是
Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86) Mar 29 2009 10:27:29 Copyright (c) 1988-2008
Microsoft Corporation Standard Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)
目前发现在不同的版本上,包括小版本号不同,结果均有可能出现不同,不知道这些不符合联机文档描述的版本,是否可以称之为Bug ?
有兴趣的朋友可以测试贴一下你的sql版本的结果。
CASE语法如下:
declare @T Table (id char(10))
insert into @T select '1'
insert into @T select '2'
insert into @T select '3'
--显示指定结果为char类型,长度为10,可以看到case后的result类型为char,没有变化。
select case id when '3'Then cast('' as char(10)) else id end as Id,
SQL_VARIANT_PROPERTY((case id when '3'Then cast('' as char(10)) else id end),'BaseType') as CaseResultType,
case id when '3'Then DataLength(cast('' as char(10))) else DataLength(ID) end as IDDataLength
from @T
--不显示指定类型,那么''则为varchar型,根据联机文档case的result类型优先级varchar优先char,
--可以看到case后的result类型为varchar。
select case id when '3'Then '' else id end as Id,
SQL_VARIANT_PROPERTY((case id when '3'Then '' else id end),'BaseType') as CaseResultType,
case id when '3'Then DataLength('') else DataLength(ID) end as IDDataLength
from @T
--不显示指定类型,那么4则为int型,根据联机文档case的result类型优先级int优先char,
--可以看到case后的result类型为int型,但存储大小不全是4。
select case id when '3'Then 4 else id end as Id,
SQL_VARIANT_PROPERTY((case id when '3'Then 4 else id end),'BaseType') as CaseResultType,
case id when '3'Then DataLength(4) else DataLength(ID) end as IDDataLength
from @T
/**//*
Id CaseResultType IDDataLength
1 int 10
2 int 10
4 int 4
*/
我以上的测试环境是
Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86) Mar 29 2009 10:27:29 Copyright (c) 1988-2008
Microsoft Corporation Standard Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)
目前发现在不同的版本上,包括小版本号不同,结果均有可能出现不同,不知道这些不符合联机文档描述的版本,是否可以称之为Bug ?
有兴趣的朋友可以测试贴一下你的sql版本的结果。
相关文章推荐
- 关于sql server case when ..else ..end结果类型的小议
- SQL Server case when then else end 多条件
- SQL中的case when then else end详细用法
- sql选择条件查询case when else end
- sql case when then else end
- SQL之case when then else end用法
- SQL脚本 CASE...WHEN...THEN...ELSE...END 的应用
- Sqlserver if else case when
- mysql操作查询结果case when then else end用法举例
- SQL中的case when then else end用法
- SQL中的case when then else end用法
- 学习SQL日记--case a when 1 then x when 2 then y else a end
- SQL case when then else end运用
- SQL的case when then else end语句的用法
- SQL中的Case When Else End的用法
- SQL多表查询与case when .. else .. end as ..,group by.. having
- SQL Case When Then Else End的使用收集
- sql语句中的判断语句case when else end
- SQL中条件语句decode与case...when...else...end的用法
- mysql操作查询结果case when then else end用法举例