2017-06-21 3 views
0

Ich habe eine Situation, in der ich einen Fehler erhalte, wenn ich die gleiche Abfrage für die gleiche Tabelle ausführen, der Unterschied ist der Spaltentyp. Die Abfrage verwendet wird:Konvertierung fehlgeschlagen, wenn nvarchar, aber nicht varchar

SELECT [name] FROM [demo] WHERE [name] = 1111111 

Wenn die name Spalte varchar(7) dann läuft es kein Problem.

Wenn die name Spalte nvarchar(7) dann gibt es einen Fehler:

Conversion failed when converting the nvarchar value 'BBBBBBB' to data type int.

Der Fehler macht Sinn - ich sehen kann, warum der Integer-Wert kann nicht direkt mit dem String-Wert verglichen werden. Ich merke auch, dass ich es mit einem Cast zu einem String für die Bedingung lösen kann.

Was ich jedoch nicht verstehe, ist, warum das Verhalten für nvarchar und varchar unterschiedlich ist. This chart scheint vorzuschlagen, dass sie das gleiche Verhalten für die Typkonvertierung haben sollten.

Weiß jemand, warum das passiert?

+0

ich beliefe nicht, dass ' VARCHAR' oder 'NVARCHAR' würden sich in diesem Fall anders verhalten ... Bitte versuchen Sie [create a MCVE] (http://stackoverflow.com/help/mcve), um dieses Problem zu reproduzieren ... Ich bin mir ziemlich sicher, dass Ihre Beobachtung hat eine andere Erklärung ... – Shnugo

+0

Sind Sie 100% das passiert? Können Sie ein einfaches Beispiel angeben, bei dem ein Wert von [name] keine Zahl ist und '= 1111111' funktioniert? –

+0

nicht repro, können Sie eine Repro liefern 'Tabelle erstellen #test ( id int, name varchar (7) ) Einsatz in #test 1 wählen, '1111' Vereinigung alle 1 wählen, 'aaaaa ' Wählen Sie * aus #test wo Name = 1111' – TheGameiswar

Antwort

4

Wenn Sie nvarchar Spalt Kriterien sollten folgendermaßen aussehen:

SELECT [name] FROM [demo] WHERE [name] = N'1111111' 

N zu Beginn der Zeichenfolge, um sicherzustellen, dass Ihr String Unicode-String (nvarchar)

Verwandte Themen