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

Joe*_*ips 13 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
Run Code Online (Sandbox Code Playgroud)

但这不是吗?

DECLARE @MyVarchar varchar = 'ABCDEF';
SELECT * FROM MyTable WHERE MyId = @MyVarchar; --Returns 0 rows
SELECT * FROM MyTable WHERE MyId = 'ABCDEF';   --Returns 1 row
Run Code Online (Sandbox Code Playgroud)

SQL Server版本是10.50.1746

GSe*_*erg 19

因为当你declare,默认varchar长度是1.所以@MyVarchar最终成为了'A'.

这是不同的cast(something as varchar),其中默认长度30.

正确的是

DECLARE @MyVarchar varchar(10) = 'ABCDEF';
Run Code Online (Sandbox Code Playgroud)

10表格中列的长度在哪里.