我想獲得所有的ID,其中文本列包含字符串過濾器。當我運行C#參數化查詢時,超時。與硬編碼參數相同的查詢工作正常
當我運行此參數化查詢,超時:
SqlCommand cmd =
new SqlCommand("SELECT ID FROM TableName WHERE Text LIKE @filter", conn);
if (filter != null)
{
cmd.Parameters.AddWithValue("@filter", "%" + filter + "%");
SqlDataReader reader;
reader = cmd.ExecuteReader(); //Locks up here!
}
當我運行相同的代碼,但硬編碼的搜索參數,它返回及時與我想要的結果:
SqlCommand cmd =
new SqlCommand("SELECT ID FROM TableName WHERE Text LIKE '%patternToMatch%'", conn);
SqlDataReader reader;
reader = cmd.ExecuteReader();
這兩個查詢有什麼不同?我認爲參數化不僅僅是簡單的文本替換。
CLARIFICATION:我正在與Microsoft SQL Server 2012服務器交談。
新信息:只有當搜索過濾器超過6個字符時才超時。
編輯:求助!我設置搜索了作爲存儲過程:
CREATE PROCEDURE TextSearch
@filter varchar(MAX) = ''
AS
BEGIN
SET NOCOUNT ON;
SELECT DISTINCT ID FROM TableName WHERE [Text] LIKE '%' + @filter + '%'
END
GO
'filter'包含什麼? – 2013-02-14 18:02:08
這是一個字符串基元。 – Dahud 2013-02-14 18:02:57
您可以運行SQL事件探查器並確保在執行時兩個查詢都相同嗎? – Shenaniganz 2013-02-14 18:04:04