2009-11-12 67 views
0

從我的C#程序,我訪問SQL Server 2008數據庫。我有一個表有fulltextindex和要搜索的索引的條目:使用LIKE關鍵字SQL中的參數

SELECT page_id FROM page_categories WHERE page_title LIKE @title 

當「標題」沒有withespaces一切都很好,但是當標題確實包含withespaces,請求失敗。它拋出沒有錯誤,但返回的記錄被關閉

command.ChangeParameter("title", title); 

using (System.Data.IDataReader reader = command.ExecuteQuery()) 
{ 
    while (reader.Read()) 
    resultSet.Add(reader.GetInt32(0)); 

    reader.Close(); 
} 

我不能圍成「」的@title參數,因爲那時的命令對象將解釋@title作爲一個字符串,而不是一個參數。

SELECT page_id FROM page_categories WHERE page_title LIKE '@title' 

任何人都知道如何在標題參數可以包含空格時使用參數作爲LIKE請求嗎?

由於提前, 弗蘭克

回答

2

你可以這樣做:

SELECT page_id 
FROM page_categories 
WHERE page_title LIKE '%' + @title + '%' 
+0

我想匹配確切的字符串。比方說,我的數據庫中有'工具'和'工具歌曲'。當我使用title =「tool」進行搜索時,我只想得到'tool'值的行,而不是'tool songs'。但是,當我使用通配符時,情況就是這樣...... – Aaginor 2009-11-12 14:01:53

+0

然後,你應該可以做到page_title = @title。也許你需要提供更好的例子... – cjk 2009-11-12 14:58:28

+0

我想做的事情是相對簡單的:我有一個nvarchar字符串和一個ID表。我想獲得id(s) - 我無法確定nvarchar是否是唯一的 - 對於給定的字符串。 – Aaginor 2009-11-12 15:35:27

2

或者到CK的答案,你可以這樣做:

command.ChangeParameter("title", "%"+title.Trim()+"%"); 
1

你不使用LIKE搜索自由文本索引。您使用CONTAINS或FREETEXT或類似的。

+0

啊,謝謝。但是我的問題仍然是:SELECT page_id FROM page_categories當標題的值包含空格時,WHERE CONTAINS(page_title,@title)將不起作用。它會引發語法錯誤。 – Aaginor 2009-11-12 14:43:41

1
SELECT page_id 
FROM page_categories 
WHERE page_title LIKE '%' + @title + '%' 

%表示類似於更常見*外SQL(零個或多個字符的任意字符串)野生炭。

您應該確保在調用代碼中通過.Trim()修改參數。

Here是可能的通配符的完整參考。

0

我的單引號添加到查詢:

SELECT page_id FROM page_categories WHERE page_title LIKE '' + @title + '' 

如果我嘗試這與 '包含'(CONTAINS(PAGE_TITLE '' + @tile + '')),我得到一個語法錯誤。