UNICODEシンボルを定義してアプリケーションをコンパイルした場合、ODBC API関数の呼び出しは、ヘッダー ファイルsqlucode.h内のマクロによって置換され、対応するWの付いた関数にマップされます。例えば、SQLExecDirect関数の呼び出しは、SQLExecDirectW関数の呼び出しにマップされます。
UNICODEシンボルを定義しなかった場合、アプリケーションは、Wの付いた関数を明示的に呼び出すことによってUnicode文字列の引数を使用できます。
アプリケーションは、UnicodeまたはANSIアプリケーションとしてコンパイルするように記述できます。この場合、文字データ型はSQL_C_TCHARとして定義できます。これは、アプリケーションが(UNICODEシンボルを定義して)Unicodeアプリケーションとしてコンパイルされた場合にSQL_C_WCHARを挿入し、ANSIアプリケーションとしてコンパイルされた場合にSQL_C_CHARを挿入するマクロを使用して実行されます。このアプリケーションのプログラマは、SQLPOINTERを引数としてとる関数を使用するように注意する必要があります。さらに、文字列データ型に対する長さ引数のサイズは、アプリケーションがANSIであるかUnicodeであるかどうかによって変わります。
Windowsの場合、インクルード ファイルtchar.h内の定義は、UnicodeまたはANSIとしてビルドされるアプリケーションでも有用です。tchar.h内のUnicode定義は、(下線付きの)_UNICODE #define関数の記述によって制御されます。
詳細については、MSDNのODBCプログラマズ マニュアルを参照してください。