В этом утверждении есть что-то странное
COALESCE (@param_ids + ',', '')
@ param_ids передается как param, и это @param_ids VARCHAR (MAX)
Любая идея, почему SQL-серверу не удалось создать план кэширования для следующего сценария.
Эта проблема была передана в Microsoft, они все еще работают над ней.
Сценарий не работает - план кеша не создается
Шаг 1
Изменить СП
IF (LTRIM(RTRIM(ISNULL(@param_ids,''))) = '')
BEGIN
SELECT @param_ids = COALESCE(@param_ids + ',', '') + CONVERT(VARCHAR(50),ID)
FROM [dbo].Content_Type WITH (NOLOCK)
END
Шаг 2
Exec Sp с параметрами
Шаг 3 (без плана кэширования)
SELECT *
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
WHERE [dbid] = DB_ID('databasename')
AND [objectid] = OBJECT_ID('databasename.dbo.us_spname')
GO
Рабочий сценарий - сгенерирован план кэширования
Шаг 1
Измените SP
IF (LTRIM(RTRIM(ISNULL(@param_ids,''))) = '')
BEGIN
--SELECT @param_ids = COALESCE(@param_ids + ',', '') + CONVERT(VARCHAR(50),ID)
--FROM [dbo].Content_Type WITH (NOLOCK)
SELECT @param_ids = COALESCE('aaaaaaa' + ',', '') + CONVERT(VARCHAR(50),ID)
FROM [dbo].Content_Type WITH (NOLOCK)
END
Шаг 2
Exec Sp с параметрами
Шаг 3 (выход из плана кэширования)
SELECT *
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
WHERE [dbid] = DB_ID('databasename')
AND [objectid] = OBJECT_ID('databasename.dbo.us_spname')
GO
Thankx