2011-12-20 46 views
8

爲什麼這個工作...的Varchar變量沒有在WHERE子句工作

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

但是這不?

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

的SQL Server版本是10.50.1746

回答

14

因爲當你declare,默認varchar長度爲1。所以@MyVarchar結果是'A'

這與cast(something as varchar)不同,默認長度爲30

正確的做法是

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

其中10是在表中的列的長度。

+0

哦,我多麼傻。或者,也許這是微軟的愚蠢 – 2011-12-20 18:24:38