軽く見ていてなんか出来そうに思えたので、詳しく調査と実装確認

  • テキストボックス等でスペース区切り(全角スペースも含む)でキーワードが複数入力される。
  • これらのいずれかのキーワードに部分一致する場合は、対象行を返す。
  • キーワードが一つも設定されない場合は、条件を設定しない。

多分、このような形で出来るのではないかと・・・

  • WHERE句の条件に『@keywords is empty OR CONTAINS(targetColumn, @keywords)』を指定する。
    (SQLはイメージです。CONTAINSは存在する。)
  • 検索実行時にテキストボックス内のテキストをContainsの書式に変換。
  • @keywordsに変換した値をバインドする。

  • 最終的にCLRを使って対応。別ページ参照

5件のコメント

iwamoto · 2009-04-03 21:05

CONTAINSを使うためにはフルテキストインデックスを作成する必要があります。
作成方法調査中。

iwamoto · 2009-04-03 23:59

フルテキストインデックスを作成するには、データベースのフルテキストインデックスを有効にする必要があります。

・データベースを作成時フルテキストインデックスを有効にする。
http://msdn.microsoft.com/ja-jp/library/ms186312(SQL.90).aspx

・データベース作成後フルテキストインデックスを有効にする。
http://msdn.microsoft.com/ja-jp/library/ms403375(SQL.90).aspx

SQL ServerのデータベースはSQL Server Management Studioを使用して作成される場合を除いて、フルテキストインデックスがデフォルトで有効になるらしい。
http://msdn.microsoft.com/ja-jp/library/ms142497(SQL.90).aspx

自分の環境にはSQL Server Management Studioはインストールされていないのですが、有効になっていない?
Visual Studioツールバー(テーブルデザイナを開くと表示される)の「フルテキストインデックスの管理」ボタンが押せない。。。
SQL Server Management Studioは、もともとはインストールされていたのでしょうか?

koreyasu · 2009-04-04 14:42

デフォルトでは有効になってないぽい。

方法 : フルテキスト インデックスを作成する
http://msdn.microsoft.com/ja-jp/library/8k3t5sdx(VS.80).aspx
「フルテキスト インデックスを作成するには、SQL Server Management Studio または Enterprise Manager などの外部ツールを使用して、あらかじめカタログを作成しておく必要があります。」

Enterprise ManagerでローカルDBファイルをアタッチして設定できるみぽい。
ただ、VS2005で作成されるmdfファイルは、SQLServer2000に対してアタッチできないようなので、SQLServer2005を入れる必要がありそう。
ちょっとやってみる。

koreyasu · 2009-04-04 16:11

DBのアタッチ方法は
 VisualStudio上のmdfファイルをSQLServerにアタッチする。
を参考で、フルテキストインデックスの作成はSQL上でできるので、それで対応
(手順メモよろしく。)

フルテキストインデックスを作った後に検証して欲しい事として
・1テーブルに複数のフルテキストインデックスを付けれるか。
 例:WHERE CONTAINS([製品名], @productNames) OR CONTAINS([型番], @typeNames)
・複数カラムに対してクエリーをかかえるか。(入力されたテキストがどちらかにマッチすればOK。
 例:WHERE CONTIANS([製品名], [型番], @text)
・部分一致での検索が可能か?
 例:電話というテキストに対して、携帯電話が引っかかる。

koreyasu · 2009-04-04 16:13

簡単なカタログの作り方は
http://d.hatena.ne.jp/gonsuzuki/20071213/1197577709
参照。詳しいのはMSのサイトがいいかな。

現在コメントは受け付けていません。