这导致“B”:
DECLARE @NAME VARCHAR(20)=' s'
IF (@NAME IS NULL OR @NAME='')
SELECT 'A'
ELSE
SELECT 'B'然而,这会导致'A‘。
DECLARE @NAME VARCHAR=' s'
IF (@NAME IS NULL OR @NAME='')
SELECT 'A'
ELSE
SELECT 'B'唯一的区别是VARCHAR(20)对VARCHAR。
这种奇怪行为的原因是什么?
发布于 2014-03-11 18:07:21
Server将未指定长度的VARCHAR默认为长度1。如果在结合Microsoft对ANSI/ISO SQL-92的解释 (参考文献)中使用,则会在相等比较期间将比较字符串填充为等长,从而导致' '从=到'',因此在第二次测试中出现了非直观的'A'。
发布于 2014-03-11 18:08:25
当没有指定大小时,VARCHAR需要指定一个大小,它假定声明只有一个字符长度。
要确认这一点,可以检查变量的长度。
因为,您的if条件是检查它是否满足条件。
DECLARE @NAME VARCHAR=' s'
select datalength(@name)
returns 1
DECLARE @NAME VARCHAR(20)=' s'
select datalength(@name)
returns 2 https://stackoverflow.com/questions/22332971
复制相似问题