我正在努力实现一些我不知道该怎么做的事情。我正在开发一个基于ASP Classic和SQL 2008,IIS7的网站。在搜索页面中,我可以选择为每个查询设置一些值,例如default.asp?q=one|two|three&q2=four|five|six
我想要做的是使用通配符,以防我的查询没有价值,并且能够同时搜索一列中的单词,以防我的查询有多个值。以下是我想要做的事情:
所以为了达到这个目的,我尝试了几件事,但没有取得任何成功。这是我的代码示例。
一个-----------
@style nVarchar(150) = ''
Select * FROM mytable WHERE CONTAINS(style, @style) AND ...
我可以设法将查询拆分为类似'"* value1 *" OR "* value2 *"'
的内容,以便从CONTAINS中获得最佳结果,但如果“style”具有值,则可以使用此查询。如果style没有值,则没有通配符,因此我可以在不过滤数据库的情况下检索所有数据。
两个---------------
@style nVarchar(150) = ''
Select * FROM mytable WHERE style LIKE '%' + @style + '%' AND ...
使用LIKE子句,我可以使用'%'
之类的通配符,如果样式没有任何值,但我无法在同一列中搜索耦合值。
所以,请记住我正在使用“存储过程”,因为这有点复杂,我需要在几个地方使用它。我将有10-12查询此搜索
任何想法都会帮助我实现这一目标。
答案 0 :(得分:1)
我理解你的问题是用“|”分隔的值。在SQL 2008中,您可以使用Xml函数将字符串转换为表并根据基表进行查询:
DECLARE @style VARCHAR(MAX) = 'value1|value2|value3'
DECLARE @v XML
SET @v = '<r><n>' + REPLACE(@style, '|', '</n><n>') + '</n></r>'
SELECT * FROM mytable
OUTER APPLY
(
SELECT c.value('text()[1]', 'varchar(50)') AS v FROM @v.nodes('//n') AS t(c)
) t
WHERE style LIKE '%' + t.v + '%'
有帮助吗?