SQL SERVER中的一些奇怪的现象
一、平白无故多出一个空格
环境sqlserver2000 sp4+windowsxp sp3
if object_id('tb') <>0
drop table tb
go
create table tb
( id varchar(10))
insert into tb
select 'a001'
select
case when 1=2 then char(ascii(max(left(id,1)))+1)
else max(left(id,1)) end
+right(cast(1000+count(*)+1 as varchar(4)),3)
from tb
结果为 a 002,a后面多出一个空格。
对各个细节的测试结果:
select datalength(left(id,1)), --返回1,为a得长度
datalength(max(left(id,1))), --返回1 ,为a的长度
ascii(max(left(id,1))), --返回97,为a的ascii值
datalength(ascii(max(left(id,1)))), --返回4,为a得ascii值(97)的长度,
datalength(ascii(max(left(id,1)))+1), --返回4,为b得ascii值(98)的长度,
datalength(char(ascii(max(left(id,1)))+1)),--返回1,为b的长度
datalength(case when 1=2 then char(ascii(max(left(id,1)))+1)else max(left(id,1)) end) --返回2,无论是case when中得条件 是1=1,还是1=2
from tb
group by id
可以看出在最后一个返回的数据长度为2,即’a ‘,很令人费解。注:在2005中没有该问题存在。
另外:此结论为FC所写,引用一下。
DECLARE @b varchar(10)
DECLARE @a char(1)
SET @b = 'bb'
SET