任何人都可以向我解释为什么以下返回'不等于'?
DECLARE @X15 varchar(15) = 'ABC'
DECLARE @X varchar = @X15
SELECT CASE WHEN @X = @X15 THEN 'Equal' ELSE 'Not equal' END
我一定错过了一些明显的东西。
答案 0 :(得分:3)
如果您打印@X
,您会看到问题:
DECLARE @X15 varchar(15) = 'ABC'
DECLARE @X varchar = @X15
SELECT LEN(@X), @X, CASE WHEN @X = @X15 THEN 'Equal' ELSE 'Not equal' END
如果您没有指定varchar
的长度,则默认为1个字符,因此@X
变量只能包含@X15
的第一个字符。
答案 1 :(得分:0)
在变量声明中使用char和varchar数据类型时,n的默认值为1。
例如: -
DECLARE @myVariable AS varchar = 'abc';
DECLARE @myNextVariable AS char = 'abc';
DECLARE @myVariableWithLength AS varchar(15) = 'abc';
--The following returns 1
SELECT DATALENGTH(@myVariable), DATALENGTH(@myNextVariable),DATALENGTH(@myVariableWithLength);
GO