Ich denke, das ist, weil es zwei Werte verschiedener Typen nicht vergleichen kann. Dann muss entweder Gleichheitsvergleichselemente in denselben Typ konvertiert werden. Hier ist int
bevorzugt, denke ich.
Ich glaube, ein int
einen Vorrang vor dem nvarchar
Typ hat, also muss es versuchen implizit die nvarchar
auf den int-Wert zu konvertieren.
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?"
Ja, das wäre schön, wenn es so wäre. Aber ich denke, das liegt daran, dass es zu viele Konversionsversuche geben würde, wenn man eine andere Art von Vergleich versucht.
where dateOfBirth = 1976-6-16
vs
where dateOfBirth = N'1976-06-16'
Im ersten Beispiel, was die Absicht des Benutzers? Soll überprüft werden, ob dateOfBirth
dem Datumswert 1976-06-16
entspricht oder mit einem ganzzahligen Wert von 1976 - 6 - 16
verglichen wird, was zu 1954
führen würde, was vernünftig genug sein könnte, um es als das Jahr eines bestimmten Datums zu betrachten.
Ich denke, es gibt implizite Konvertierungen wie nvarchar
zu datetime
, aber es würde viel zu decken, so dass sie sich auf die am häufigsten mögliche Konvertierung beschränkt.
Ich weiß nicht, warum es so ist.Aber das ist es, was es immer macht :) –