У меня есть запрос, который я использую с SQL Server 2008R2 через ADO.NET. Когда я использую предложение LIKE inline, оно работает менее чем за секунду, при этом возвращается 5 строк из 2 миллионов. Если я объявляю параметр, как это делается в .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, но я понятия не имею.