2011-12-20 17 views
8

Dlaczego ta praca ...zmienna Varchar nie pracuje w WHERE

DECLARE @MyInt int = 12345; 
SELECT * FROM MyTable WHERE MyId = @MyInt; --Returns 1 row 
SELECT * FROM MyTable WHERE MyId = 12345; --Returns 1 row 

ale to nie robi?

DECLARE @MyVarchar varchar = 'ABCDEF'; 
SELECT * FROM MyTable WHERE MyId = @MyVarchar; --Returns 0 rows 
SELECT * FROM MyTable WHERE MyId = 'ABCDEF'; --Returns 1 row 

wersja SQL Server jest 10.50.1746

Odpowiedz

14

Bo kiedy declare, domyślnie varchar długość 1. Tak więc @MyVarchar kończy się na 'A'.

Różni się od cast(something as varchar), gdzie domyślna długość to 30.

słuszne jest

DECLARE @MyVarchar varchar(10) = 'ABCDEF'; 

gdzie 10 jest długością kolumny w tabeli.

+0

Och, jak głupio ode mnie. A może to głupie z Microsoftu? –