SQL Server 2016 Upgrade Advisor meldet ein Datenbankkompatibilitätsproblem: Regel: konstante Ausdrücke sind in der ORDER BY-Klausel in 90 oder höheren Kompatibilitätsmodi nicht zulässig.SQL Server 2016 Upgrade Advisor Problem
Version90 Regel Titel: Konstante Ausdrücke sind nicht
Empfehlung in der ORDER BY-Klausel in 90 oder höher Kompatibilitätsmodus erlaubt: Bevor Sie die Datenbank-Kompatibilitätsmodus auf 90 oder höher Anweisungen ändern, modifizieren, die in konstanten Ausdrücken verwenden die ORDER BY-Klausel, um einen Spaltennamen oder Spaltenalias oder eine nicht negative Ganzzahl zu verwenden, die die Position des Namens oder Alias in der Auswahlliste darstellt.
Regel-ID: Microsoft.Rules.Data.Upgrade.UR00326
Dies ist der SQL, die den Fehler verursacht, und ich kann nicht herausfinden, wie die Sortierung nach Anweisung ändern, um die Upgrade-Berater zu befriedigen ???
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;
Ich versuchte, die ORDER BY basierend auf dem Vorschlag zu ändern.
ORDER BY CASE WHEN 'name' @order = THEN OBJECT_NAME (st.objectid, st.dbid) WHEN @order = 'size' THEN SUM (cp.size_in_bytes) WHEN @order = 'lesen' THEN SUM (qs.total_logical_reads) WENN @order = 'schreiben' THEN SUM (qs.total_logical_writes) SONST SUM (cp.usecounts) END DESC;
Aber der SQL Server 2016 Upgrade Advisor meldet immer noch das gleiche Problem.
ich auch das gleiche Problem. Hast du es geschafft, das zu lösen? – f0rfun