Varchar变量在WHERE子句中不起作用

时间:2011-12-20 18:20:22

标签: sql variables sql-server-2008-r2

为什么这样做......

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

1 个答案:

答案 0 :(得分:19)

因为当您declare时,默认varchar长度为1。因此@MyVarchar最终成为'A'

这与cast(something as varchar)不同,default length is 30

正确的是

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

其中10是表格中列的长度。