Переменная Varchar не работает в предложении WHERE - PullRequest
13 голосов
/ 20 декабря 2011

Почему это работает ...

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 Ответ

19 голосов
/ 20 декабря 2011

Потому что, когда вы declare, по умолчанию varchar длина равна 1. Таким образом, @MyVarchar в итоге становится 'A'.

Это отличается от cast(something as varchar), где длина по умолчанию равна 30.

Правильнее всего будет

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

где 10 - длина столбца в таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...