在 WHERE 子句中,varchar 变量无法正常工作。

19

为什么这个能够工作...

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个回答

26
因为当你进行声明时,默认的varchar长度为1。所以@MyVarchar最终变成了'A'
这与cast(something as varchar)是不同的,后者的默认长度为30
正确的方法是:
DECLARE @MyVarchar varchar(10) = 'ABCDEF';

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


我一直在尝试弄清楚为什么这不起作用,只有意识到我继承的代码将变量声明为长度为13,而输入字符串的长度为15!谢谢@GSerg - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接