I have a query that I am using with SQL Server 2008R2 through ADO.NET. When I use the LIKE inline clause, it works in less than a second, and 5 rows are returned from 2 million. If I declare a paramater, as I do in .NET at the beginning of a request in SSMS, it takes forever.
This is the same query, but parameterized.
The first (which works great) (works great):
;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
The second, which is always conducted:
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
I believe this has something to do with the internal workings of SQL Server, but I really don't know.
source
share