2011-12-20 36 views
8

Tại sao công việc này ...Varchar biến không được làm việc trong mệnh đề WHERE

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

nhưng điều này không?

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

SQL Server là phiên bản 10.50.1746

Trả lời

14

Bởi vì khi bạn declare, mặc định chiều dài varchar1. Vì vậy, @MyVarchar kết thúc là 'A'.

Điều này khác với cast(something as varchar), trong đó chiều dài mặc định là 30.

Điều đúng là

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

nơi 10 là chiều dài của cột trong bảng.

+0

Ồ, thật ngớ ngẩn của tôi. Hoặc có thể nó là ngớ ngẩn của Microsoft –

Các vấn đề liên quan