我有一张桌子'表格'列标题为'。 在我的存储过程中,我创建了一个临时表'#temp1'使用列' searchVals'。
将多个字符串解析为存储过程,字符串数量是可变的。
如果'标题'那么我想要实现的是选择一行。包含一个或多个searchVal'。但我还没能成功实现这一目标。
例如像
这样的东西 SELECT title FROM #temp1 WHERE title IN ('%'+(SELECT searchVal FROM #temp1)+'%')
问题显然是IN不允许使用通配符,但如果确实如此,那就是我试图实现的结果类型。 堆叠OR也不起作用,因为#temp1中的行数是可变的。 谓词和自由文本搜索无法正常工作,因为表单数据库没有被正确编入索引。
我已经提出了我认为有效的解决方案,但我似乎无法正确构建它。该函数将从WHERE子句中调用并返回一个布尔值。对不起,如果在其他地方已经回答了这个问题,我确实进行了广泛的搜索。 下面是我提出的伪代码解决方案,我不确定可互换的SQL代码。
DECLARE FUNCTION dbo.checkVal(searchVal column, formTitle varchar)
RETURNS boolean
AS
BEGIN
WHILE (not end of column)
IF formTitle LIKE '%'+searchVal+'%'
RETURN true
END
END
RETURN FALSE
END
抱歉我的SQL代码不一致且不正确。我将不胜感激任何会使我的代码工作的建议或更正。也欢迎更好的解决方案。 谢谢。
答案 0 :(得分:0)
您可以在JOIN语句中使用LIKE运算符:
SELECT DISTINCT f.*
FROM forms f
JOIN #temp1 t ON f.title LIKE '%' + t.column + '%'
但请记住,使用LIKE运算符确实会带来性能损失,因此如果可能,您将希望使用where子句减少表单表中的行数
答案 1 :(得分:0)
如何通过EXISTS()
检查每一行表单?
SELECT *
FROM forms f
WHERE EXISTS
(
SELECT *
FROM #temp1
WHERE f.title LIKE '%' + searchVals + '%'
)