GOAL:可能であれば、それぞれ独自の検索文字列値と順序を持つ3つの異なる列の検索に基づいて結果を返します。FREETEXTABLEを使用して複数の列を検索する
ルール:
- 任意の列が
- 結果渡され
null
ない限りがそれぞれの列にすべての検索文字列を含む必見を検索することができるようにします - すべて検索IF文字列が
null
の場合、空の結果を返します
現在のストアドプロシージャ:
私は、上記の規則を遵守するために、多くの研究の後、この思い付くことができました。
ALTER PROCEDURE [Application].[usp_Institution_Search]
@RowCount INT = 100,
@Name NVARCHAR(255),
@City NVARCHAR(255),
@Country NVARCHAR(255)
AS
BEGIN
SET NOCOUNT ON;
IF ISNULL(@Name, '') = '' SET @Name = '""'
IF ISNULL(@City, '') = '' SET @City = '""'
IF ISNULL(@Country, '') = '' SET @Country = '""'
SELECT TOP (@RowCount)
[i].*
FROM
[dbo].[Institutions] [i]
WHERE
((NULLIF(@Name, '""') IS NULL OR FREETEXT([i].[InstitutionName], @Name))
AND (NULLIF(@City, '""') IS NULL OR FREETEXT([i].[City], @City))
AND (NULLIF(@Country, '""') IS NULL OR FREETEXT([i].[Country], @Country))
AND
(
NULLIF(@Name, '""') IS NOT NULL
OR NULLIF(@City, '""') IS NOT NULL
OR NULLIF(@Country, '""') IS NOT NULL)
)
END
問題:私はInstitutionName
で結果を注文しようとしたが、その後、私が代わりにRANK
を使用して考えました。より多くの研究の後、私はそれがFREETEXTTABLE
を使用することが最善であることがわかった。現時点では、ほとんどの結果が常に複数の列に対して1つの文字列を検索することを話しているので、自分の状況をどのように処理するのがベストかはわかりません。
これはどのように動作するかは完全にはわかりませんが、最高の組み合わせがすべての列の検索でRANK
になっていると思います。
これが可能な場合は、いくつかの例を示してください。