2011-09-07 59 views
2

我需要在我的SQL Server数据库中进行类似的搜索。但是,我仍然使用我的搜索值的参数,我该如何做到这一点?SQL参数中的通配符

我不是在说封装在%的。我需要能够在搜索词的中间添加%

WHERE title LIKE '%foo%bar%' 

作为一个例子,但与params。

编辑: 为了详细说明是否存在params: 我使用MS SQL 2008和C#,所以这将是:

WHERE title LIKE '@SearchParam' 

@SearchParam将被设置为"%foo%bar%"

我希望有道理吗?

+1

这听起来像一个邀请的一部分到SQL注入。也许你应该看看全文索引呢? –

+0

你可以举一个参数的例子吗?我在猜测你传递的参数是'foobar',并且想要在它们之间插入'%'。我对吗? – NaveenBhat

+0

我只是想让用户在他的搜索字段中添加一个*,然后用%替换它。因此,用户可以搜索“Nic * olai”并获得“Nicoolai”。我正试图避免打开注射。如果我不能用参数来做这件事,我可能根本就不会这样做。 – Nicolai

回答

3

这工作得很好

create proc dbo.lookupWild(@LIKEclause VARCHAR(20)) 
as 
begin 
    select * from teams where Name like @LIKEclause 
end 
go 
exec lookupWild 'E%G%' 

而且喜欢的东西 - 没有SQL注入“1 = 1滴表”,他们只是通配符搜索

+0

存储过程真的是唯一的方法吗? – Nicolai

+0

我真的不明白这是如何工作的?如果你:exec lookupWild'E%'或'1'='1 - 为什么不能破坏exec命令? – Nicolai

+0

试一试。 SQL不会将该参数解释为查询的附加文本。该参数只是LIKE子句,所以如果你放入你的例子,SQL将它视为一个LIKE表达式...... – Sparky