我有一个通过 ADO.NET 与 SQL Server 2008R2 一起使用的查询。当我内联使用 LIKE 子句时,它可以在不到一秒的时间内运行,从 200 万行中返回 5 行。如果我像在 .NET 中那样在 SSMS 中的查询开始时声明参数,则需要很长时间。
这是相同的查询,但参数化了。
第一个(效果很好)是(效果很好):
;WITH Results_CTE AS (
SELECT ld.* , ROW_NUMBER() OVER (ORDER BY PK_ID) AS RowNum
FROM list..List_Data ld
WHERE Name IS NOT NULL AND
Postcode LIKE 'SW14 1xx%'
) SELECT * FROM Results_CTE
第二个永远需要的是:
declare @postcode varchar(10) = 'SW14 1xx'
;WITH Results_CTE AS (
SELECT ld.* , ROW_NUMBER() OVER (ORDER BY PK_ID) AS RowNum
FROM list..List_Data ld
WHERE Name IS NOT NULL AND
Postcode LIKE @postcode +'%'
) SELECT * FROM Results_CTE
我相信这与 SQL Server 的内部工作原理有关,但我真的不知道。
最佳答案
我在谷歌上搜索 C# 中 SqlCommand.Parameters.Add() 的潜在问题,并找到了此页面。我知道这是一篇 SQL Server 帖子,但其他人可能会通过 google 找到它,并且它可能会对他们使用 C# 有所帮助。
对我来说,以上答案都不起作用,所以我尝试了另一种方法。
而不是:
cmd.Parameters.Add(new SqlParameter("@postcode", postcode));
我用这个代替:
// Replace SqlDbType enumeration with whatever SQL Data Type you're using.
cmd.Parameters.Add("@postcode", SqlDbType.VarChar).Value = postcode;
不要忘记命名空间:
using System.Data;
希望这对某人有帮助!
关于SQL 参数减慢查询速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7874109/