Transact-SQLの馬鹿

イワンの馬鹿にかけるにはちっと名称が長すぎですね。

以下完全引用

SQL Server、デフォルトで、アルファベットの大文字小文字は勿論、ひらがなカタカナ、いわゆる全角半角が区別されない。データもカラム名も。びっくりした。Transact-SQL リファレンス Windows 照合順序ってとこに書いてあるのだけど、

Omitted を指定すると文字幅は区別されず、WS を指定すると文字幅が区別されます。

もうね。アホかと。

さらにMSのHelpドキュメントを引用。
モノはこれ → http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/tsqlref/ts_ca-co_5z55.asp

# データベースの作成または変更

CREATE DATABASE または ALTER DATABASE ステートメントの COLLATE 句を使用して、データベースの既定の照合順序を指定できます。また、SQL Server Enterprise Manager を使用してデータベースを作成するときに照合順序を指定することもできます。照合順序を指定しない場合、SQL Serverインスタンスの既定の照合順序がデータベースに指定されます。
# テーブルの列の作成または変更

CREATE TABLE または ALTER TABLE ステートメントの COLLATE 句を使用して、文字型の各列に対して照合順序を指定できます。また、SQL Server Enterprise Manager を使用してテーブルを作成するときに照合順序を指定することもできます。照合順序を指定しない場合、列には、データベースの既定の照合順序が指定されます。

つまり、Oracleみたいにかってにやってくんないんだってさ。
てかもうUnicodeが違うだろ!ひらがなとカタカナは!何でそれがイコール処理なんだよ!
馬鹿かてめぇ!>MS


でこれだけだと片手落ちなので、解決策。
COLLATE句ってのを使う。
判定させたいLIKE検索の後にくっつける。これは一検索句につき、一つ持つ。
例を書く。


SELECT hoge, hogehoge, hogehogehoge FROM T_HOGE WHERE hoge LIKE '%明日があるさ%' COLLATE JAPANESE_CS_AS_KS


上記のCOLLATEの書き方だと、JAPANESEで日本語をキャラクタである事を明示し、CSで大文字小文字の区別をつける。
ASでアクセントに区別(濁音、半濁音)をつけて、KSでひらがなとカタカナに区別をつけます。
もう、SQLServer嫌い。てかDB自体が嫌い。