Я думаю, это потому, что он не может сравнивать два значения разных типов. Затем is должен преобразовать оба элемента сравнения равенства в один и тот же тип. Здесь, int
предпочтительнее, я думаю.
Я считаю, что int
имеет приоритет над типом nvarchar
, поэтому он должен неявно пытаться преобразовать nvarchar
в значение типа int.
РЕДАКТИРОВАТЬ # 1
"Но не будет ли разумно попытаться преобразовать значение, которое я дал, в тип поля, в котором я ищу, а не наоборот?"
Да, было бы неплохо, если бы это было так. Но я полагаю, это потому, что было бы слишком много попыток конверсии, которые можно было бы подразумевать при попытке какого-либо другого вида сравнения.
where dateOfBirth = 1976-6-16
против
where dateOfBirth = N'1976-06-16'
В первом примере, каково намерение пользователя? Следует ли проверить, равно ли dateOfBirth
значению даты 1976-06-16
или сравнить с целочисленным значением 1976 - 6 - 16
, что приведет к 1954
, что может быть достаточно разумным, чтобы считать его годом любая дата.
Я думаю, что есть неявные преобразования, такие как nvarchar
в datetime
, но многое можно было бы охватить, поэтому они ограничились наиболее распространенным возможным преобразованием.