From cb1f7912f595a7a5effd8d77a4e1506f716b3b32 Mon Sep 17 00:00:00 2001 From: gflpcantor31 Date: Mon, 19 Jan 2026 15:24:19 +0100 Subject: [PATCH 1/2] Improve ANSI Settings Check Logic to Distinguish Best Practices from Legacy Defaults (issue #658) --- sp_PerfCheck/sp_PerfCheck.sql | 39 ++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/sp_PerfCheck/sp_PerfCheck.sql b/sp_PerfCheck/sp_PerfCheck.sql index 377d2330..f5e967d0 100644 --- a/sp_PerfCheck/sp_PerfCheck.sql +++ b/sp_PerfCheck/sp_PerfCheck.sql @@ -4334,32 +4334,33 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. check_id = 7005, priority = 50, /* Medium priority */ category = N'Database Configuration', - finding = N'Non-Standard ANSI Settings', + finding = N'ANSI Settings Require Review', database_name = d.name, details = - N'Database has non-standard ANSI settings: ' + - CASE WHEN d.is_ansi_null_default_on = 1 THEN N'ANSI_NULL_DEFAULT ON, ' ELSE N'' END + - CASE WHEN d.is_ansi_nulls_on = 1 THEN N'ANSI_NULLS ON, ' ELSE N'' END + - CASE WHEN d.is_ansi_padding_on = 1 THEN N'ANSI_PADDING ON, ' ELSE N'' END + - CASE WHEN d.is_ansi_warnings_on = 1 THEN N'ANSI_WARNINGS ON, ' ELSE N'' END + - CASE WHEN d.is_arithabort_on = 1 THEN N'ARITHABORT ON, ' ELSE N'' END + - CASE WHEN d.is_concat_null_yields_null_on = 1 THEN N'CONCAT_NULL_YIELDS_NULL ON, ' ELSE N'' END + - CASE WHEN d.is_numeric_roundabort_on = 1 THEN N'NUMERIC_ROUNDABORT ON, ' ELSE N'' END + - CASE WHEN d.is_quoted_identifier_on = 1 THEN N'QUOTED_IDENTIFIER ON, ' ELSE N'' END + - N'which can cause unexpected application behavior and compatibility issues.', + N'One or more ANSI settings differ from recommended best practices: ' + + CASE WHEN d.is_ansi_null_default_on = 0 THEN N'ANSI_NULL_DEFAULT OFF (recommended ON), ' ELSE N'' END + + CASE WHEN d.is_ansi_nulls_on = 0 THEN N'ANSI_NULLS OFF (recommended ON), ' ELSE N'' END + + CASE WHEN d.is_ansi_padding_on = 0 THEN N'ANSI_PADDING OFF (recommended ON), ' ELSE N'' END + + CASE WHEN d.is_ansi_warnings_on = 0 THEN N'ANSI_WARNINGS OFF (recommended ON), ' ELSE N'' END + + CASE WHEN d.is_arithabort_on = 0 THEN N'ARITHABORT OFF (recommended ON in many contexts), ' ELSE N'' END + + CASE WHEN d.is_concat_null_yields_null_on = 0 THEN N'CONCAT_NULL_YIELDS_NULL OFF (recommended ON), ' ELSE N'' END + + CASE WHEN d.is_numeric_roundabort_on = 1 THEN N'NUMERIC_ROUNDABORT ON (recommended OFF), ' ELSE N'' END + + CASE WHEN d.is_quoted_identifier_on = 0 THEN N'QUOTED_IDENTIFIER OFF (recommended ON), ' ELSE N'' END + + N'These settings may lead to inconsistent behavior, reduced feature compatibility, or unexpected query results ' + + N'if they do not align with recommended best practices.', url = N'https://erikdarling.com/sp_PerfCheck#ANSISettings' FROM #databases AS d WHERE d.database_id = @current_database_id AND ( - d.is_ansi_null_default_on = 1 - OR d.is_ansi_nulls_on = 1 - OR d.is_ansi_padding_on = 1 - OR d.is_ansi_warnings_on = 1 - OR d.is_arithabort_on = 1 - OR d.is_concat_null_yields_null_on = 1 - OR d.is_numeric_roundabort_on = 1 - OR d.is_quoted_identifier_on = 1 + d.is_ansi_null_default_on = 0 + OR d.is_ansi_nulls_on = 0 + OR d.is_ansi_padding_on = 0 + OR d.is_ansi_warnings_on = 0 + OR d.is_arithabort_on = 0 + OR d.is_concat_null_yields_null_on = 0 + OR d.is_numeric_roundabort_on = 1 + OR d.is_quoted_identifier_on = 0 ); /* Check Query Store Status */ From 2ebd834b8aac3ea3ea2b56210023eabcbf864c6b Mon Sep 17 00:00:00 2001 From: gflpcantor31 Date: Mon, 19 Jan 2026 16:23:24 +0100 Subject: [PATCH 2/2] Improve ANSI Settings Check Logic to Distinguish Best Practices from Legacy Defaults (issue #658) --- sp_PerfCheck/sp_PerfCheck.sql | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/sp_PerfCheck/sp_PerfCheck.sql b/sp_PerfCheck/sp_PerfCheck.sql index f5e967d0..6f4ac0ea 100644 --- a/sp_PerfCheck/sp_PerfCheck.sql +++ b/sp_PerfCheck/sp_PerfCheck.sql @@ -4338,14 +4338,14 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. database_name = d.name, details = N'One or more ANSI settings differ from recommended best practices: ' + - CASE WHEN d.is_ansi_null_default_on = 0 THEN N'ANSI_NULL_DEFAULT OFF (recommended ON), ' ELSE N'' END + - CASE WHEN d.is_ansi_nulls_on = 0 THEN N'ANSI_NULLS OFF (recommended ON), ' ELSE N'' END + - CASE WHEN d.is_ansi_padding_on = 0 THEN N'ANSI_PADDING OFF (recommended ON), ' ELSE N'' END + - CASE WHEN d.is_ansi_warnings_on = 0 THEN N'ANSI_WARNINGS OFF (recommended ON), ' ELSE N'' END + - CASE WHEN d.is_arithabort_on = 0 THEN N'ARITHABORT OFF (recommended ON in many contexts), ' ELSE N'' END + - CASE WHEN d.is_concat_null_yields_null_on = 0 THEN N'CONCAT_NULL_YIELDS_NULL OFF (recommended ON), ' ELSE N'' END + - CASE WHEN d.is_numeric_roundabort_on = 1 THEN N'NUMERIC_ROUNDABORT ON (recommended OFF), ' ELSE N'' END + - CASE WHEN d.is_quoted_identifier_on = 0 THEN N'QUOTED_IDENTIFIER OFF (recommended ON), ' ELSE N'' END + + CASE WHEN d.is_ansi_null_default_on = 0 THEN N'ANSI_NULL_DEFAULT OFF (recommended ON), ' ELSE N'' END + + CASE WHEN d.is_ansi_nulls_on = 0 THEN N'ANSI_NULLS OFF (recommended ON), ' ELSE N'' END + + CASE WHEN d.is_ansi_padding_on = 0 THEN N'ANSI_PADDING OFF (recommended ON), ' ELSE N'' END + + CASE WHEN d.is_ansi_warnings_on = 0 THEN N'ANSI_WARNINGS OFF (recommended ON), ' ELSE N'' END + + CASE WHEN d.is_arithabort_on = 0 THEN N'ARITHABORT OFF (recommended ON in many contexts), ' ELSE N'' END + + CASE WHEN d.is_concat_null_yields_null_on = 0 THEN N'CONCAT_NULL_YIELDS_NULL OFF (recommended ON), ' ELSE N'' END + + CASE WHEN d.is_numeric_roundabort_on = 1 THEN N'NUMERIC_ROUNDABORT ON (recommended OFF), ' ELSE N'' END + + CASE WHEN d.is_quoted_identifier_on = 0 THEN N'QUOTED_IDENTIFIER OFF (recommended ON), ' ELSE N'' END + N'These settings may lead to inconsistent behavior, reduced feature compatibility, or unexpected query results ' + N'if they do not align with recommended best practices.', url = N'https://erikdarling.com/sp_PerfCheck#ANSISettings' @@ -4353,14 +4353,14 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. WHERE d.database_id = @current_database_id AND ( - d.is_ansi_null_default_on = 0 - OR d.is_ansi_nulls_on = 0 - OR d.is_ansi_padding_on = 0 - OR d.is_ansi_warnings_on = 0 - OR d.is_arithabort_on = 0 - OR d.is_concat_null_yields_null_on = 0 - OR d.is_numeric_roundabort_on = 1 - OR d.is_quoted_identifier_on = 0 + d.is_ansi_null_default_on = 0 + OR d.is_ansi_nulls_on = 0 + OR d.is_ansi_padding_on = 0 + OR d.is_ansi_warnings_on = 0 + OR d.is_arithabort_on = 0 + OR d.is_concat_null_yields_null_on = 0 + OR d.is_numeric_roundabort_on = 1 + OR d.is_quoted_identifier_on = 0 ); /* Check Query Store Status */