私は、スペースで区切られた単語の文字列をストアドプロシージャに渡そうとしています。私がしたいのは、それらの単語に対してSELECTを実行し、それの前に設定します。私は再帰的なCTEでそれを達成する方法を検討してきましたが、再帰が適切に動作するようにアンカーとターミネータを設定する適切な方法を理解することはできません。私は私のサーバー側のコード(C#)でこれを行うことができます知っているが、私はそこに行うことができます知っている何かのためのDBに繰り返し呼び出しを行う必要はありませんしたいです。以下は、最大文字列と私が作った任意のハック再帰試みを分割するストアドプロシージャ、マイナスの操作のいずれかの分割型(すなわち、それがない、すべてが一つのキーワードの結果セットを返す場合)である:SQLクエリ - 再帰的な調整
ALTER PROCEDURE searchTests
@searchQuery varchar(200)
AS
SELECT
TestID, [Test Name], [Specimen Type], Methodology, [Performing Lab]
FROM RolodexTestDB
WHERE
(RolodexTestDB.inactive IS NULL OR NOT RolodexTestDB.inactive = 'Yes')
AND (
RolodexTestDB.[Test Name] Like '%' + @searchQuery + '%'
or RolodexTestDB.Methodology Like '%' + @searchQuery + '%'
or RolodexTestDB.[Synonyms] Like '%' + @searchQuery + '%'
or RolodexTestDB.[Specimen Type] Like '%' + @searchQuery + '%'
or RolodexTestDB.[Included Tests] Like '%' + @searchQuery + '%'
)
)
ORDER BY [Test Name]
あなたが達成しようとしているもの以外TSQL用語では。「以降の各SELECTは、その前に、結果セットを照会」とはどういう意味ですか? – Paparazzi
あなたは@searchQueryのサンプル値を提供することができ、RolodexTestDBでいくつかのサンプルデータ、そして望みの結果?それ以外の場合、あなたがしようとしていることを正確に解釈することは難しいです。 –
申し訳ありません - 私のところでは悪い説明。 @searchQueryのサンプル値は次のようになります: "blood HIV white" - 私が必要とするのは、上記のクエリを3回(または同じことを実現する他の解決策)実行することです - クエリが実行されるたびに、フィルタリングされています(最初の実行時に最初の用語を含むレコードが取得され、2番目の用語でその結果セットに対してクエリを実行するなど)。 それは意味があったと思います。 – user1007918