私があなたを正しく理解していれば、同様の問題がありました。ストアド関数「split」で解決しました。この関数は、パラメーターを区切り記号で分割し、1 列のテーブルを返します。
これにより、返されたテーブル列を記事のキーワードと結合できます。
これは、コードのもう少し一般的なバージョンです
FUNCTION [dbo].[Split] (@s varchar(512))
RETURNS table
AS
RETURN (
WITH Pieces(pn, start, stop) AS (
SELECT 1, 1, dbo.GetNextDelimiter(@s,0)
UNION ALL
SELECT pn + 1, stop + 1, dbo.GetNextDelimiter(@s, stop + 1)
FROM Pieces
WHERE stop > 0
),
Parts(pn,s,start,[end]) as
(SELECT pn,
SUBSTRING(@s, start, CASE WHEN (stop > 0) THEN stop-start ELSE 512 END) AS s, start, stop
FROM Pieces)
SELECT pn as PartNumber,s as StringPart,(start - 1) start,([end] - 1) [end] FROM Parts WHERE s != ''
)
デリミタ機能:
FUNCTION [dbo].[GetNextDelimiter](@string nvarchar(max), @startFrom int)
RETURNS int
AS
BEGIN
-- Declare the return variable here
DECLARE @response int
SELECT @response = MIN(delimiterIndex)
FROM
(SELECT CHARINDEX(' ', @string, @startFrom)
UNION
SELECT CHARINDEX('-', @string, @startFrom)
UNION
SELECT CHARINDEX('''', @string, @startFrom)) as Delimiters(delimiterIndex)
WHERE delimiterIndex != 0
IF @response is NULL
SET @response = 0
RETURN @response
END
これにより、セミコロンだけでなく、任意の種類と数の区切り記号を使用できます。
ここからは簡単です
Select * from Articles WHERE Token in Split(@Input)