为什么这样做......
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
答案 0 :(得分:19)
因为当您declare
时,默认varchar
长度为1
。因此@MyVarchar
最终成为'A'
。
这与cast(something as varchar)
不同,default length is 30
。
正确的是
DECLARE @MyVarchar varchar(10) = 'ABCDEF';
其中10
是表格中列的长度。