SQL Server 2016アップグレードアドバイザーがデータベース互換性の問題を報告します。 ルール:90以降の互換モードでORDER BY句に定数式を使用できません。SQL Server 2016アップグレードアドバイザー問題
Version90 ルールタイトル:定数式が90でORDER BY句では許可されません以降の互換モード
推奨:90以降に、データベースの互換性モードを変更する前に、一定の表現を使用するステートメントを変更列名または列エイリアスを使用するORDER BY句、または選択リスト内の名前またはエイリアスの位置を表す非負整数。
ルールID:Microsoft.Rules.Data.Upgrade.UR00326
これでエラーを引き起こしているSQLと私はアップグレードアドバイザーを満たすためにORDER BYステートメントを変更する方法を見つけ出すことはできません?
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [Utilities].[GetProcStats] (@order varchar(100) = 'use')
AS
BEGIN
WITH GetQueryStats
(plan_handle,
total_elapsed_time,
total_logical_reads,
total_logical_writes,
total_physical_reads)
AS
(SELECT qs.plan_handle,
SUM(qs.total_elapsed_time) AS total_elapsed_time,
SUM(qs.total_logical_reads) AS total_logical_reads,
SUM(qs.total_logical_writes) AS total_logical_writes,
SUM(qs.total_physical_reads) AS total_physical_reads
FROM sys.dm_exec_query_stats qs
GROUP BY qs.plan_handle)
SELECT DB_NAME(st.dbid) AS database_name,
OBJECT_SCHEMA_NAME(st.objectid, st.dbid) AS schema_name,
OBJECT_NAME(st.objectid, st.dbid) AS proc_name,
SUM(cp.usecounts) AS use_counts,
SUM(cp.size_in_bytes) AS size_in_bytes,
SUM(qs.total_elapsed_time) AS total_elapsed_time,
CAST(SUM(qs.total_elapsed_time) AS decimal(38, 4))/SUM(cp.usecounts) AS avg_elapsed_time_per_use,
SUM(qs.total_logical_reads) AS total_logical_reads,
CAST(SUM(qs.total_logical_reads) AS decimal(38, 4))/SUM(cp.usecounts) AS avg_logical_reads_per_use,
SUM(qs.total_logical_writes) AS total_logical_writes,
CAST(SUM(qs.total_logical_writes) AS decimal(38, 4))/SUM(cp.usecounts) AS avg_logical_writes_per_use,
SUM(qs.total_physical_reads) AS total_physical_reads,
CAST(SUM(qs.total_physical_reads) AS decimal(38, 4))/SUM(cp.usecounts) AS avg_physical_reads_per_use,
st.text
FROM sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) st
INNER JOIN GetQueryStats qs ON cp.plan_handle = qs.plan_handle
INNER JOIN sys.procedures p ON st.objectid = p.object_id
WHERE p.type IN ('P', 'PC')
GROUP BY st.dbid, st.objectid, st.text
ORDER BY
CASE @order
WHEN 'name' THEN OBJECT_NAME(st.objectid)
WHEN 'size' THEN SUM(cp.size_in_bytes)
WHEN 'read' THEN SUM(qs.total_logical_reads)
WHEN 'write' THEN SUM(qs.total_logical_writes)
ELSE SUM(cp.usecounts)
END DESC;
END;
私はORDER BYを提案に基づいて以下に変更しようとしました。
CASE BY ORDER @order = 'name' のTHEN OBJECT_NAME(st.objectid、st.dbid) @order = 'サイズ' THEN SUM(cp.size_in_bytes) @orderは= '読み取り' THEN SUM(qs.total_logical_reads) WHERE @order = 'write' THEN SUM(qs.total_logical_writes) ELSE SUM(cp.usecounts) END DESC;
ただし、SQL Server 2016アップグレードアドバイザでも同じ問題が報告されます。
を持っています。あなたはこれを解決することができましたか? – f0rfun