GOAL: um ein Ergebnis basierend auf einer Suche von 3 verschiedenen Spalten mit jeweils eigenen Suchzeichenfolgenwert und Reihenfolge von RANK
, wenn möglich zurückgeben.SQL Server sucht mehrere Spalten mit FREETEXTABLE
REGELN:
- zulassen jede Spalte
- Ergebnisse must alle Suchzeichenketten auf ihren jeweiligen Spalte enthalten gesucht werden, es sei denn,
null
geben wird - IF alle Suche Zeichenketten sind
null
, geben leere Ergebnisse zurück
Aktuelle gespeicherte Prozedur:
ich in der Lage war, mit dieser nach viel Forschung, um die von den oben gegebenen Regeln zu halten zu kommen.
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
Probleme: Ich war über die Ergebnisse von InstitutionName
zu bestellen, aber dann dachte ich über ein RANK
stattdessen verwenden. Nach mehr Forschung fand ich, dass es am besten ist, FREETEXTTABLE
zu verwenden. An diesem Punkt bin ich mir nicht sicher, wie ich am besten mit meiner Situation umgehen kann, da die meisten Ergebnisse immer davon reden, eine Zeichenfolge gegen mehrere Spalten zu suchen.
Ich bin mir nicht ganz sicher, wie das funktioniert, aber ich nehme an, ich möchte die höchste kombinierte RANK
aus der Suche aller Spalten.
Wenn das möglich ist, zeigen Sie mir bitte einige Beispiele.