From ef2ef7ea7bedb4855cec266c4bb51bc39c2455cb Mon Sep 17 00:00:00 2001 From: Erik Darling <2136037+erikdarlingdata@users.noreply.github.com> Date: Thu, 2 Apr 2026 08:41:44 -0400 Subject: [PATCH] Fix Lite FinOps Enterprise features query for servers without database_id column MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Port the COL_LENGTH check from Dashboard (#766) to Lite — detect whether sys.dm_db_persisted_sku_features has the database_id column before querying it, falling back to N'(unknown)' on older builds that lack the column. Closes community PR #777 Co-Authored-By: Claude Opus 4.6 (1M context) --- Lite/Services/LocalDataService.FinOps.cs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/Lite/Services/LocalDataService.FinOps.cs b/Lite/Services/LocalDataService.FinOps.cs index 1dc7101..7459cad 100644 --- a/Lite/Services/LocalDataService.FinOps.cs +++ b/Lite/Services/LocalDataService.FinOps.cs @@ -1569,11 +1569,18 @@ public async Task> GetRecommendationsAsync(int serverId, if (edition.Contains("Enterprise", StringComparison.OrdinalIgnoreCase)) { - using var featCmd = new SqlCommand(@" -SELECT - DB_NAME(database_id) AS database_name, - feature_name -FROM sys.dm_db_persisted_sku_features", sqlConn); + var hasDatabaseId = false; + using (var colCheck = new SqlCommand( + "SELECT COL_LENGTH('sys.dm_db_persisted_sku_features', 'database_id')", sqlConn)) + { + colCheck.CommandTimeout = 10; + hasDatabaseId = await colCheck.ExecuteScalarAsync() is not null and not DBNull; + } + + var featSql = hasDatabaseId + ? "SELECT DB_NAME(database_id) AS database_name, feature_name FROM sys.dm_db_persisted_sku_features" + : "SELECT N'(unknown)' AS database_name, feature_name FROM sys.dm_db_persisted_sku_features"; + using var featCmd = new SqlCommand(featSql, sqlConn); featCmd.CommandTimeout = 30; var features = new List();