结果为'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
。
这种奇怪行为的原因是什么?
Sql Server默认长度未指定的VARCHAR
为1。当结合微软对ANSI/ISO SQL-92的解释时(参考这里),结果填充比较字符串在相等比较期间相等长度,导致' '
是=
到''
,因此在第二个测试中非直观的'A'
。
VARCHAR需要指定大小,如果没有指定大小,则假定声明为一个字符长度。
要确认这一点,您可以检查变量的长度。
因为,你的if条件是检查"它满足条件。
DECLARE @NAME VARCHAR=' s'
select datalength(@name)
returns 1
DECLARE @NAME VARCHAR(20)=' s'
select datalength(@name)
returns 2