2011-09-07 28 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