Wenn ein Vergleich zwischen einem Wert des CHAR-Typs (CHAR, VARCHAR, LONG VARCHAR) und einem Wert des NCHAR-Typs (NCHAR, NVARCHAR, LONG NVARCHAR) vorgenommen wird, benutzt SQL Anywhere Inferenzregeln, um den Typ zu ermitteln, in dem der Vergleich erfolgen soll. Im Allgemeinen gilt: Wenn ein Wert auf einer Spaltenreferenz basiert und der andere nicht, wird der Vergleich in dem Typ des Werts vorgenommen, der die Spaltenreferenz enthält.
Die Inferenzregeln beschäftigen sich damit, ob ein Wert auf einer Spaltenreferenz basiert. Wenn ein Wert eine Variable, eine Hostvariable, eine Literalkonstante oder ein komplexer Ausdruck ist, der nicht auf einer Spaltenreferenz basiert, und der andere Wert auf einer Spaltenreferenz basiert, wird der konstantenbasierte Wert implizit auf den Typ des spaltenbasierten Werts angepasst.
Nachfolgend sind alle Inferenzregeln in der Reihenfolge aufgeführt, in der sie angewendet werden:
Wenn der NCHAR-Wert auf einer Spaltenreferenz basiert, wird der CHAR-Wert implizit auf NCHAR angepasst und der Vergleich erfolgt als NCHAR. Dies umfasst auch den Fall, wenn sowohl der NCHAR- als auch der CHAR-Wert auf Spaltenreferenzen basieren.
Sonst gilt: Wenn der NCHAR-Wert nicht auf einer Spaltenreferenz basiert und der CHAR-Wert auf einer Spaltenreferenz basiert, wird der NCHAR-Wert implizit auf CHAR angepasst und der Vergleich erfolgt als CHAR.
Es ist wichtig, die on_charset_conversion_failure-Option zu berücksichtigen, wenn NCHAR-Werte in CHAR konvertiert werden, da diese Option das Verhalten steuert, wenn ein NCHAR-Zeichen nicht im CHAR-Zeichensatz dargestellt werden kann. Weitere Hinweise finden Sie unter NCHAR in CHAR konvertieren.
Wenn keiner der beiden Werte auf einer Spaltenreferenz basiert, wird der CHAR-Wert implizit auf NCHAR angepasst und der Vergleich erfolgt als NCHAR.
Die Bedingung Employees.GivenName = N'Susan'
vergleicht eine CHAR-Spalte (Employees.GivenName) mit dem Literal N'Susan'. Der Wert N'Susan' wird an CHAR angepasst und
der Vergleich wird so durchgeführt, als sei er folgendermaßen geschrieben:
Employees.GivenName = CAST( N'Susan' AS CHAR ) |
Alternativ stellt die Bedingung Employees.GivenName = T.nchar_column
, dass der T.nchar_column-Wert nicht an CHAR angepasst werden kann. In diesem Fall wird der Vergleich so durchgeführt, als
sei er folgendermaßen geschrieben, wobei ein Index für Employees.GivenName nicht verwendet werden kann:
CAST( Employees.GivenName AS NCHAR ) = T.nchar_column; |
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |