このステートメントには奇妙なことがありますCOALESCE(@param_ids +'、'、'')
@param_idsはparamとして渡され、@ param_ids VARCHAR(MAX)です。
SQL-Serverが以下のシナリオのキャッシュプランを作成できなかった理由。この問題はMicrosoftにエスカレートされており、現在も作業中です。
動作しないシナリオ-キャッシュプランが生成されないステップ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)
END
ステップ2paramsを使用したExecSp
ステップ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
ステップ2paramsを使用したExecSp
ステップ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
ありがとう