CHAR 型 (CHAR、VARCHAR、LONG VARCHAR) の値と NCHAR 型 (NCHAR、NVARCHAR、LONG NVARCHAR) の値との間で比較を実行する場合は、比較を実行する型を判断するために推定規則が使用されます。一般的に、一方の値のみがカラム参照に基づいている場合は、カラム参照が含まれている値の型を使用して比較が実行されます。
推定規則では、値がカラム参照に基づいているかどうかが重要です。一方の値が変数、ホスト変数、またはリテラル定数であるか、またはカラム参照に基づいていない複雑な式であり、かつもう一方の値がカラム参照に基づいている場合は、暗黙的に、定数に基づく値がカラムに基づく値にキャストされます。
次に、推定規則を適用順に示します。
NCHAR 値がカラム参照に基づいている場合は、暗黙的に CHAR 値が NCHAR にキャストされ、NCHAR として比較されます。NCHAR 値と CHAR 値の両方がカラム参照に基づいている場合も同様です。
NCHAR 値がカラム参照に基づいておらず、かつ CHAR 値がカラム参照に基づいている場合は、暗黙的に NCHAR 値が CHAR にキャストされ、CHAR として比較されます。
NCHAR から CHAR への変換が予想される場合は、on_charset_conversion_failure オプションの設定を検討することが重要です。このオプションでは、NCHAR 文字を CHAR 文字セットで表せないときの動作を制御するからです。詳細については、NCHAR から CHAR への変換を参照してください。
どちらの値もカラム参照に基づいていない場合、暗黙的に CHAR 値が NCHAR にキャストされ、NCHAR として比較されます。
条件 Employees.GivenName = N'Susan'
では、CHAR カラム (Employees.GivenName) をリテラル N'Susan' と比較します。値 N'Susan' は CHAR にキャストされるため、この比較は次のように記述された場合と同等に行われます。
Employees.GivenName = CAST( N'Susan' AS CHAR ) |
または、条件 Employees.GivenName = T.nchar_column
では、値 T.nchar_column を CHAR にキャストできないことが検出されます。この比較は、次のように記述された場合と同等に実行され、Employees.GivenName のインデックスは使用できません。
CAST( Employees.GivenName AS NCHAR ) = T.nchar_column; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |