三级:sqlservercasewhen..else..end结果类型
来源:优易学  2011-10-23 11:40:38   【优易学:中国教育考试门户网】   资料下载   IT书店

 

  下面准备测试数据及开始测试:
  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
  /**//*
  Id  CaseResultType  IDDataLength
  1   char  10
  2   char  10
  char  10
  */
  --不显示指定类型,那么’’则为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
  /**//*
  Id  CaseResultType  IDDataLength
  1   varchar  10
  2   varchar  10
  varchar  0
  */
  --不显示指定类型,那么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版本的结果。

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训