Can anyone explain to me why the following returns 'Not equal'?
DECLARE @X15 varchar(15) = 'ABC'
DECLARE @X varchar = @X15
SELECT CASE WHEN @X = @X15 THEN 'Equal' ELSE 'Not equal' END
I must be missing something obvious.
Can anyone explain to me why the following returns 'Not equal'?
DECLARE @X15 varchar(15) = 'ABC'
DECLARE @X varchar = @X15
SELECT CASE WHEN @X = @X15 THEN 'Equal' ELSE 'Not equal' END
I must be missing something obvious.
If you print out @X
you'll see the problem:
DECLARE @X15 varchar(15) = 'ABC'
DECLARE @X varchar = @X15
SELECT LEN(@X), @X, CASE WHEN @X = @X15 THEN 'Equal' ELSE 'Not equal' END
If you don't specify a length for varchar
it defaults to 1 character so your @X
variable can only hold the first character of @X15
.
The default value of n is 1 for the char and varchar data types when they are used in variable declaration.
Ex:-
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