如果您使用表变量而不是列表来存储单词,那么您可以使用以下内容:
DECLARE @T TABLE (Word VARCHAR(255) NOT NULL);
INSERT @T (Word)
VALUES ('test1'), ('test2'), ('test3'), ('test4'), ('test5'), ('test20');
SELECT *
FROM TABLE t
WHERE EXISTS
( SELECT 1
FROM @T
WHERE t.Text LIKE '%' + word + '%'
);
您还可以创建一个表类型来存储它,然后如果需要,您可以将它作为参数传递给存储过程:
CREATE TYPE dbo.StringList (Value VARCHAR(MAX) NOT NULL);
GO
CREATE PROCEDURE dbo.YourProcedures @Words dbo.StringList READONLY
AS
SELECT *
FROM TABLE t
WHERE EXISTS
( SELECT 1
FROM @Words w
WHERE t.Text LIKE '%' + w.word + '%'
);
GO
DECLARE @T dbo.StringList;
INSERT @T (Value)
VALUES ('test1'), ('test2'), ('test3'), ('test4'), ('test5'), ('test20');
EXECUTE dbo.YourProcedure @T;
有关这方面的更多信息,请参阅MSDN 上的表值参数。
编辑
我可能在您使用时误解了您的要求,LIKE
但没有通配符运算符,在这种情况下您可以只使用IN
,但是我仍然建议使用表格来存储您的值:
DECLARE @T TABLE (Word VARCHAR(255) NOT NULL);
INSERT @T (Word)
VALUES ('test1'), ('test2'), ('test3'), ('test4'), ('test5'), ('test20');
SELECT *
FROM TABLE t
WHERE t.Text IN (SELECT Word FROM @T);