Я думаю, это потому, что он не может сравнивать два значения разных типов. Затем необходимо преобразовать элементы сравнения равенства в один и тот же тип. Здесь предпочтительнее int
.
Я считаю, int
имеет приоритет над nvarchar
типа, поэтому он должен неявно попытаться преобразовать nvarchar
в значение INT.
EDIT # 1
"But wouldn't it be sensible to try and convert the value I have given to the type of the field I am searching in, instead of the other way around?"
Да, это было бы хорошо, если бы это сделал. Но я предполагаю, что это связано с тем, что слишком много попыток конверсии подразумевают при попытке какого-то другого сравнения.
where dateOfBirth = 1976-6-16
против
where dateOfBirth = N'1976-06-16'
В первом примере, что такое намерение пользователя? Следует ли проверять, соответствует ли значение dateOfBirth
значению даты 1976-06-16
, или сравнить его с целым значением 1976 - 6 - 16
, что приведет к 1954
, что может быть достаточно разумным, чтобы рассматривать его как год любой даты.
Я думаю, что есть неявные преобразования, такие как nvarchar
- datetime
, но было бы много, чтобы покрыть, поэтому они ограничились самым распространенным возможным преобразованием.
Я не знаю, почему он это делает.Но это то, что он всегда делает :) –