(そして実際に考えます:))誰かがすでに同様の問題を抱えていて、それを解決したことを願っています..
簡単に言えば、基本的な問題..「単語検索」機能と関連データの使用は近い将来急速に成長するため、私たち(その場合は私を意味します)は全文検索を使用するように変更する必要があります..
そのため、すべてのセットアップが完了しました..しかし、クエリ構文を機能させることができません(以下の簡略化されたバージョン)
declare @searchTerm varchar(256)
set @searchTerm = 'test'
declare @searchValues table (code varchar(900), searchterm varchar(256))
-- this is just for testing, usually the table is prefilled with different codes and values
if(@searchTerm is not null)
insert into @searchValues
select code, @searchTerm from dbo.base_question where question_type_id = 'text'
select distinct(a.item_id)
from dbo.answer_text as a with (nolock)
join dbo.base_question as bqt with (nolock) on bqt.id = a.base_question_id
join @searchValues as st on bqt.code = st.code
where a.value is not null
and not LTRIM(RTRIM(a.value)) = ''
and CONTAINS(a.value, st.searchterm)
where句ははるかに大きな句の一部です..推測すると、「CONTAINS」句には一種の「静的」検索語入力が必要で、行依存の値を処理できないと思います..
msdnにもここにも何も見つかりませんでした..
主な問題の 1 つは、「base_questions」が固定されておらず、変更される可能性があり、検索条件 (どの用語を検索するか) が完全に動的であることです..そのため、switch-case やそのようなものはありません..動的SQLも実際にはオプションではありません(さまざまな理由がありますが、それはこの質問の範囲をはるかに超えています:) ..)
ただし、このデータベースへのすべての検索は、スカラーおよびテーブル値のパラメーター ( @searchValues など) を使用してストアド プロシージャを介して行われます。何らかの形で可能であれば、そのままにしておきたいと思います。
ヒント、ヒント、提案は大歓迎です
参考までに、簡略化された db-structure の完全性の短いバージョン:
回答( id bigint (PK)、item_id uniqueidentifier (FK)、base_question_id uniqueidentifier (FK)、値nvarchar(max))
base_question ( id uniqueidentifier (PK), code varchar(900), question_type_id (FK), .. 記述内容 .. )
item ( id uniqueidentifier (PK), .. 記述内容 .. )
.. db 構造を変更して、検索のパフォーマンスを向上させ、再び機能させることもできます ;) .. (現在、約 120k の item_id と約 2.5 ミリオの回答がありますが、それは簡単に 10 倍以上に増加します)