scripts/collector/sqlserver/sql/dbServerFeatures.sql (692 lines of code) (raw):

/* Copyright 2024 Google LLC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ SET NOCOUNT ON; SET LANGUAGE us_english; DECLARE @PKEY AS VARCHAR(256) DECLARE @CLOUDTYPE AS VARCHAR(256) DECLARE @PRODUCT_VERSION AS INTEGER DECLARE @TABLE_PERMISSION_COUNT AS BIGINT DECLARE @ROW_COUNT_VAR AS BIGINT DECLARE @DMA_SOURCE_ID AS VARCHAR(256) DECLARE @DMA_MANUAL_ID AS VARCHAR(256) DECLARE @ERROR_NUMBER AS INT SELECT @PKEY = N'$(pkey)'; SELECT @CLOUDTYPE = 'NONE'; SELECT @PRODUCT_VERSION = CONVERT(INTEGER, PARSENAME(CONVERT(NVARCHAR(255), SERVERPROPERTY('productversion')), 4)); SELECT @DMA_SOURCE_ID = N'$(dmaSourceId)'; SELECT @DMA_MANUAL_ID = N'$(dmaManualId)'; IF UPPER(@@VERSION) LIKE '%AZURE%' SELECT @CLOUDTYPE = 'AZURE' IF OBJECT_ID('tempdb..#FeaturesEnabled') IS NOT NULL DROP TABLE #FeaturesEnabled; CREATE TABLE #FeaturesEnabled ( Features NVARCHAR(40), Is_EnabledOrUsed NVARCHAR(4), Count INT ); IF OBJECT_ID('tempdb..#myPerms') IS NOT NULL DROP TABLE #myPerms; CREATE TABLE #myPerms ( entity_name nvarchar(255), subentity_name nvarchar(255), permission_name nvarchar(255) ); INSERT INTO #myPerms SELECT * FROM fn_my_permissions('msdb.dbo.sysmail_server', 'OBJECT') WHERE permission_name = 'SELECT' and subentity_name =''; INSERT INTO #myPerms SELECT * FROM fn_my_permissions('msdb.dbo.sysmail_profile', 'OBJECT') WHERE permission_name = 'SELECT' and subentity_name =''; INSERT INTO #myPerms SELECT * FROM fn_my_permissions('msdb.dbo.sysmail_profileaccount', 'OBJECT') WHERE permission_name = 'SELECT' and subentity_name =''; INSERT INTO #myPerms SELECT * FROM fn_my_permissions('msdb.dbo.sysmail_account', 'OBJECT') WHERE permission_name = 'SELECT' and subentity_name =''; INSERT INTO #myPerms SELECT * FROM fn_my_permissions('msdb.dbo.log_shipping_secondary_databases', 'OBJECT') WHERE permission_name = 'SELECT' and subentity_name =''; INSERT INTO #myPerms SELECT * FROM fn_my_permissions('msdb.dbo.log_shipping_primary_databases', 'OBJECT') WHERE permission_name = 'SELECT' and subentity_name =''; INSERT INTO #myPerms SELECT * FROM fn_my_permissions('msdb.dbo.sysmaintplan_subplans', 'OBJECT') WHERE permission_name = 'SELECT' and subentity_name =''; INSERT INTO #myPerms SELECT * FROM fn_my_permissions('msdb.dbo.sysjobs', 'OBJECT') WHERE permission_name = 'SELECT' and subentity_name =''; --DB Mail SELECT @TABLE_PERMISSION_COUNT = COUNT_BIG(*) FROM #myPerms WHERE LOWER(entity_name) IN ('dbo.sysmail_profile','dbo.sysmail_profileaccount','dbo.sysmail_account','dbo.sysmail_server') AND UPPER(permission_name) = 'SELECT'; IF @TABLE_PERMISSION_COUNT >= 4 AND @CLOUDTYPE = 'NONE' BEGIN exec(' INSERT INTO #FeaturesEnabled SELECT ''IsDbMailEnabled'', CONVERT(NVARCHAR(255), value_in_use), CASE WHEN value_in_use > 0 THEN 1 ELSE 0 END FROM sys.configurations WHERE name = ''Database Mail XPs'''); END ELSE BEGIN exec(' INSERT INTO #FeaturesEnabled SELECT ''IsDbMailEnabled'', ''0'', 0 FROM sys.configurations WHERE name = ''Database Mail XPs'''); END; --external scripts enabled BEGIN exec(' INSERT INTO #FeaturesEnabled SELECT ''IsExternalScriptsEnabled'', CONVERT(NVARCHAR(255), value_in_use), CASE WHEN value_in_use > 0 THEN 1 ELSE 0 END FROM sys.configurations WHERE name = ''external scripts enabled'''); END -- Data Quality Services BEGIN BEGIN TRY exec(' WITH dqs_service as ( select count(*) as dqs_count from syslogins where name like ''##MS_dqs%'') INSERT INTO #FeaturesEnabled SELECT ''DATA QUALITY SERVICES'' as Features, CASE WHEN dqs_count > 0 THEN 1 ELSE 0 END AS Is_EnabledOrUsed, dqs_count as Count from dqs_service'); END TRY BEGIN CATCH SELECT @ERROR_NUMBER = ERROR_NUMBER() IF @ERROR_NUMBER = 229 exec(' INSERT INTO #FeaturesEnabled SELECT ''DATA QUALITY SERVICES'' as Features, ''0'' as Is_EnabledOrUsed, ''0'' as Count'); ELSE exec(' WITH dqs_service as ( select count(*) as dqs_count from sys.sql_logins where name like ''##MS_dqs%'') INSERT INTO #FeaturesEnabled SELECT ''DATA QUALITY SERVICES'' as Features, CASE WHEN dqs_count > 0 THEN 1 ELSE 0 END AS Is_EnabledOrUsed, dqs_count as Count from dqs_service'); END CATCH END; --filestream enabled IF @PRODUCT_VERSION >= 11 BEGIN BEGIN TRY exec('WITH check_filestream AS ( SELECT name, ISNULL((SELECT count(1) FROM sys.master_files AS mf WHERE mf.database_id = db.database_id AND mf.type = 2),0) AS hasfs FROM sys.databases AS db WHERE state = 0 AND is_read_only = 0 ) INSERT INTO #FeaturesEnabled SELECT ''IsFileStreamEnabled'', CASE WHEN sum(hasfs) > 0 THEN ''1'' ELSE ''0'' END, CASE WHEN sum(hasfs) > 0 THEN 1 ELSE 0 END FROM check_filestream /* SQL Server 2012 (11.x) above */'); END TRY BEGIN CATCH exec(' INSERT INTO #FeaturesEnabled VALUES ( ''IsFileStreamEnabled'', ''0'', 0) '); END CATCH END ELSE BEGIN exec(' INSERT INTO #FeaturesEnabled VALUES ( ''IsFileStreamEnabled'', ''0'', 0) '); END --hybrid buffer pool enabled IF @CLOUDTYPE = 'AZURE' BEGIN exec('INSERT INTO #FeaturesEnabled SELECT ''IsHybridBufferPoolEnabled'', CONVERT(NVARCHAR(255),is_enabled), CASE WHEN is_configured > 0 THEN 1 ELSE 0 END from sys.server_memory_optimized_hybrid_buffer_pool_configuration /* SQL Server 2019 (15.x) and later versions */'); END ELSE BEGIN IF @PRODUCT_VERSION >= 15 BEGIN SELECT @ROW_COUNT_VAR = COUNT_BIG(*) from sys.server_memory_optimized_hybrid_buffer_pool_configuration; IF @ROW_COUNT_VAR = 0 BEGIN exec('INSERT INTO #FeaturesEnabled SELECT ''IsHybridBufferPoolEnabled'', ''0'', 0'); END; IF @ROW_COUNT_VAR > 0 BEGIN exec('INSERT INTO #FeaturesEnabled SELECT ''IsHybridBufferPoolEnabled'', COALESCE(CONVERT(NVARCHAR(255),is_enabled), 0), CASE WHEN is_enabled > 0 THEN 1 ELSE 0 END from sys.server_memory_optimized_hybrid_buffer_pool_configuration /* SQL Server 2019 (15.x) and later versions */'); END; END; ELSE BEGIN exec('INSERT INTO #FeaturesEnabled SELECT ''IsHybridBufferPoolEnabled'', ''0'', 0 /* Earlier than SQL Server 2019 (15.x) versions */'); END; END; --log shipping enabled SELECT @TABLE_PERMISSION_COUNT = COUNT_BIG(*) FROM #myPerms WHERE LOWER(entity_name) in ('dbo.log_shipping_primary_databases','dbo.log_shipping_secondary_databases') and UPPER(permission_name) = 'SELECT'; IF @TABLE_PERMISSION_COUNT >= 2 AND @CLOUDTYPE = 'NONE' BEGIN exec('WITH log_shipping_count AS ( SELECT count(*) log_shipping FROM msdb..log_shipping_primary_databases UNION ALL SELECT count(*) log_shipping FROM msdb..log_shipping_secondary_databases ) INSERT INTO #FeaturesEnabled SELECT ''IsLogShippingEnabled'', COALESCE(CONVERT(varchar,sum(log_shipping)),''0''), COALESCE(sum(log_shipping),0)) FROM log_shipping_count'); END; ELSE BEGIN exec('INSERT INTO #FeaturesEnabled VALUES (''IsLogShippingEnabled'', ''0'', 0)'); END; --maintenance plans enabled SELECT @TABLE_PERMISSION_COUNT = COUNT(*) FROM #myPerms WHERE LOWER(entity_name) in ('dbo.sysmaintplan_subplans','dbo.sysjobs') and UPPER(permission_name) = 'SELECT'; IF @TABLE_PERMISSION_COUNT >= 2 BEGIN exec('INSERT INTO #FeaturesEnabled SELECT ''MaintenancePlansEnabled'', CASE WHEN COALESCE(count(*),0) > 0 THEN ''1'' ELSE ''0'' END, CASE WHEN COALESCE(count(*),0) > 0 THEN COALESCE(count(*),0) ELSE 0 END FROM msdb..sysmaintplan_plans p INNER JOIN msdb..sysmaintplan_subplans sp ON p.id = sp.plan_id INNER JOIN msdb..sysjobs j ON sp.job_id = j.job_id WHERE j.[enabled] = 1'); END; ELSE BEGIN exec('INSERT INTO #FeaturesEnabled VALUES (''MaintenancePlansEnabled'', ''0'', 0)'); END; --Polybase Enabled BEGIN exec(' INSERT INTO #FeaturesEnabled SELECT ''IsPolybaseEnabled'', CONVERT(NVARCHAR(255), value_in_use), CASE WHEN value_in_use > 0 THEN 1 ELSE 0 END FROM sys.configurations WHERE name = ''polybase enabled'''); END; --Resource Governor BEGIN exec ('INSERT INTO #FeaturesEnabled SELECT ''IsResourceGovernorEnabled'', CONVERT(NVARCHAR(255), is_enabled), CASE WHEN is_enabled > 0 THEN 1 ELSE 0 END FROM sys.resource_governor_configuration'); END; --Stretch Database IF @CLOUDTYPE = 'AZURE' BEGIN exec('INSERT INTO #FeaturesEnabled SELECT ''IsStretchDatabaseEnabled'', CONVERT(NVARCHAR(255), count(*)), CONVERT(int, count(*)) FROM sys.remote_data_archive_databases'); END IF @CLOUDTYPE = 'NONE' BEGIN IF @PRODUCT_VERSION >= 13 AND @PRODUCT_VERSION <= 16 BEGIN exec('INSERT INTO #FeaturesEnabled SELECT ''IsStretchDatabaseEnabled'', CONVERT(NVARCHAR(255), count(*)), CONVERT(int, count(*)) FROM sys.remote_data_archive_databases /* SQL Server 2016 (13.x) and Up to 2022 */'); END ELSE BEGIN exec('INSERT INTO #FeaturesEnabled VALUES (''IsStretchDatabaseEnabled'', ''0'', 0)'); END END --TDE in Use BEGIN exec('INSERT INTO #FeaturesEnabled SELECT ''IsTDEInUse'', CONVERT(NVARCHAR(255), count(*)), CONVERT(int, count(*)) FROM sys.databases WHERE is_encrypted <> 0 AND state = 0 AND is_read_only = 0'); END --TempDB Metadata Memory Optimized BEGIN exec(' INSERT INTO #FeaturesEnabled SELECT ''IsTempDbMetadataMemoryOptimized'', CONVERT(NVARCHAR(255), value_in_use), CASE WHEN value_in_use > 0 THEN 1 ELSE 0 END FROM sys.configurations WHERE name = ''tempdb metadata memory-optimized'''); END; --Sysadmin role BEGIN WITH check_sysadmin_role AS ( SELECT name, type_desc, is_disabled FROM sys.server_principals WHERE IS_SRVROLEMEMBER ('sysadmin', name) = 1 AND name NOT LIKE '%NT SERVICE%' AND name <> 'sa' UNION SELECT name, type_desc, is_disabled FROM sys.server_principals WHERE IS_SRVROLEMEMBER ('dbcreator', name) = 1 AND name NOT LIKE '%NT SERVICE%' AND name <> 'sa' ) INSERT INTO #FeaturesEnabled SELECT 'sysadmin_role', CASE WHEN count(*) > 0 THEN '1' ELSE '0' END, CASE WHEN count(*) > 0 THEN count(*) ELSE 0 END FROM check_sysadmin_role; END; --Server level triggers BEGIN BEGIN TRY exec('INSERT INTO #FeaturesEnabled SELECT ''ServerLevelTriggers'', CASE WHEN count(*) > 0 THEN ''1'' ELSE ''0'' END, CONVERT(int, count(*)) from sys.server_triggers'); END TRY BEGIN CATCH IF ERROR_NUMBER() = 208 AND ERROR_SEVERITY() = 16 AND ERROR_STATE() = 1 exec('INSERT INTO #FeaturesEnabled SELECT ''ServerLevelTriggers'', ''0'', 0 '); END CATCH END; --OPENROWSET BEGIN exec(' INSERT INTO #FeaturesEnabled SELECT ''OPENROWSET'', CONVERT(NVARCHAR(255), value_in_use) , CASE WHEN value_in_use > 0 THEN 1 ELSE 0 END FROM sys.configurations WHERE name = ''Ad Hoc Distributed Queries'''); END; --ad hoc distributed queries / distributed transaction coordinator DTC BEGIN exec(' INSERT INTO #FeaturesEnabled SELECT ''ad hoc distributed queries'', CONVERT(NVARCHAR(255), value_in_use) , CASE WHEN value_in_use > 0 THEN 1 ELSE 0 END FROM sys.configurations WHERE name = ''Ad Hoc Distributed Queries'''); END; --BULK INSERT INSERT INTO #FeaturesEnabled SELECT 'BULK_INSERT', CASE WHEN COUNT_BIG(p.permission_name) > 0 THEN '1' ELSE '0' END, CONVERT(bigint,COUNT_BIG(p.permission_name)) FROM fn_my_permissions(NULL, 'SERVER') p WHERE permission_name like '%ADMINISTER BULK OPERATIONS%'; -- CountServiceBrokerEndpoints BEGIN TRY exec('INSERT INTO #FeaturesEnabled SELECT ''CountServiceBrokerEndpoints'', CASE WHEN COUNT_BIG(*) > 0 THEN ''1'' ELSE ''0'' END, CONVERT(bigint, COUNT_BIG(*)) FROM sys.service_broker_endpoints'); END TRY BEGIN CATCH IF ERROR_NUMBER() = 208 AND ERROR_SEVERITY() = 16 AND ERROR_STATE() = 1 exec('INSERT INTO #FeaturesEnabled SELECT ''CountServiceBrokerEndpoints'', ''0'', 0'); END CATCH -- CountTSQLEndpoints BEGIN TRY exec('INSERT INTO #FeaturesEnabled SELECT ''CountTSQLEndpoints'', CASE WHEN COUNT_BIG(*) > 0 THEN ''1'' ELSE ''0'' END, CONVERT(BIGINT, COUNT_BIG(*)) FROM sys.tcp_endpoints WHERE endpoint_id > 65535'); END TRY BEGIN CATCH IF ERROR_NUMBER() = 208 AND ERROR_SEVERITY() = 16 AND ERROR_STATE() = 1 BEGIN exec('INSERT INTO #FeaturesEnabled SELECT ''CountTSQLEndpoints'', ''0'', 0'); END ELSE BEGIN exec('INSERT INTO #FeaturesEnabled SELECT ''CountTSQLEndpoints'', ''0'', 0'); END END CATCH /* Collect permissions which are unsupported in CloudSQL SQL Server */ BEGIN BEGIN TRY exec('INSERT INTO #FeaturesEnabled SELECT tmp.permission_name, CASE WHEN count(1) > 0 THEN 1 ELSE 0 END, count(1) FROM ( SELECT pr.name, pr.type, pr.type_desc, p.permission_name, p.type AS permission_type FROM sys.server_permissions p INNER JOIN sys.server_principals pr ON p.grantee_principal_id = pr.principal_id WHERE pr.name NOT LIKE ''NT SERVICE\%'' AND name NOT LIKE ''##MS_%##'' AND pr.is_fixed_role <> 1 AND p.permission_name IN (''ADMINISTER BULK OPERATIONS'', ''ALTER ANY CREDENTIAL'', ''ALTER ANY EVENT NOTIFICATION'', ''ALTER ANY EVENT SESSION'', ''ALTER RESOURCES'', ''ALTER SETTINGS'', ''AUTHENTICATE SERVER'', ''CONTROL SERVER'', ''CREATE DDL EVENT NOTIFICATION'', ''CREATE ENDPOINT'', ''CREATE TRACE EVENT NOTIFICATION'', ''EXTERNAL ACCESS ASSEMBLY'', ''SHUTDOWN'', ''EXTERNAL ASSEMBLIES'', ''CREATE ASSEMBLY'') UNION ALL SELECT pr.name, pr.type, pr.type_desc, dp.permission_name, dp.type AS permission_type FROM sys.database_permissions dp INNER JOIN sys.server_principals pr ON dp.grantee_principal_id = pr.principal_id WHERE pr.name NOT LIKE ''NT SERVICE\%'' AND name NOT LIKE ''##MS_%##'' AND pr.is_fixed_role <> 1 AND dp.permission_name IN (''ADMINISTER BULK OPERATIONS'', ''ALTER ANY CREDENTIAL'', ''ALTER ANY EVENT NOTIFICATION'', ''ALTER ANY EVENT SESSION'', ''ALTER RESOURCES'', ''ALTER SETTINGS'', ''AUTHENTICATE SERVER'', ''CONTROL SERVER'', ''CREATE DDL EVENT NOTIFICATION'', ''CREATE ENDPOINT'', ''CREATE TRACE EVENT NOTIFICATION'', ''EXTERNAL ACCESS ASSEMBLY'', ''SHUTDOWN'', ''EXTERNAL ASSEMBLIES'', ''CREATE ASSEMBLY'') ) tmp GROUP BY tmp.permission_name'); END TRY BEGIN CATCH IF ERROR_NUMBER() = 208 AND ERROR_SEVERITY() = 16 AND ERROR_STATE() = 1 BEGIN TRY exec('INSERT INTO #FeaturesEnabled SELECT tmp.permission_name, CASE WHEN count(1) > 0 THEN 1 ELSE 0 END, count(1) FROM ( SELECT pr.name, pr.type, pr.type_desc, dp.permission_name, dp.type AS permission_type FROM sys.database_permissions dp INNER JOIN sys.database_principals pr ON dp.grantee_principal_id = pr.principal_id WHERE pr.name NOT LIKE ''NT SERVICE\%'' AND name NOT LIKE ''##MS_%##'' AND pr.is_fixed_role <> 1 AND dp.permission_name IN (''ADMINISTER BULK OPERATIONS'', ''ALTER ANY CREDENTIAL'', ''ALTER ANY EVENT NOTIFICATION'', ''ALTER ANY EVENT SESSION'', ''ALTER RESOURCES'', ''ALTER SETTINGS'', ''AUTHENTICATE SERVER'', ''CONTROL SERVER'', ''CREATE DDL EVENT NOTIFICATION'', ''CREATE ENDPOINT'', ''CREATE TRACE EVENT NOTIFICATION'', ''EXTERNAL ACCESS ASSEMBLY'', ''SHUTDOWN'', ''EXTERNAL ASSEMBLIES'', ''CREATE ASSEMBLY'')) tmp GROUP BY tmp.permission_name'); END TRY BEGIN CATCH IF ERROR_NUMBER() = 208 AND ERROR_SEVERITY() = 16 AND ERROR_STATE() = 1 exec(' INSERT INTO #FeaturesEnabled values (''ADMINISTER BULK OPERATIONS'',''0'',0); INSERT INTO #FeaturesEnabled values (''ALTER ANY CREDENTIAL'',''0'',0); INSERT INTO #FeaturesEnabled values (''ALTER ANY EVENT NOTIFICATION'',''0'',0); INSERT INTO #FeaturesEnabled values (''ALTER ANY EVENT SESSION'',''0'',0); INSERT INTO #FeaturesEnabled values (''ALTER RESOURCES'',''0'',0); INSERT INTO #FeaturesEnabled values (''ALTER SETTINGS'',''0'',0); INSERT INTO #FeaturesEnabled values (''AUTHENTICATE SERVER'',''0'',0); INSERT INTO #FeaturesEnabled values (''CONTROL SERVER'',''0'',0); INSERT INTO #FeaturesEnabled values (''CREATE ASSEMBLY'',''0'',0); INSERT INTO #FeaturesEnabled values (''CREATE DDL EVENT NOTIFICATION'',''0'',0); INSERT INTO #FeaturesEnabled values (''CREATE ENDPOINT'',''0'',0); INSERT INTO #FeaturesEnabled values (''CREATE TRACE EVENT NOTIFICATION'',''0'',0); INSERT INTO #FeaturesEnabled values (''EXTERNAL ACCESS ASSEMBLY'',''0'',0); INSERT INTO #FeaturesEnabled values (''SHUTDOWN'',''0'',0); '); END CATCH END CATCH END --Service Broker tasks DECLARE @ServBrokerTasksUsed as INT, @IS_ServBrokerTasksUsed as NVARCHAR(4); select @ServBrokerTasksUsed = count(*) from sys.dm_broker_activated_tasks; IF @ServBrokerTasksUsed > 0 SET @IS_ServBrokerTasksUsed = '1' ELSE SET @IS_ServBrokerTasksUsed = '0' ; INSERT INTO #FeaturesEnabled VALUES ( 'Service Broker Tasks Used', @IS_ServBrokerTasksUsed, ISNULL(@ServBrokerTasksUsed,0) ); --External Assemblies IF @CLOUDTYPE = 'AZURE' BEGIN INSERT INTO #FeaturesEnabled VALUES ( 'External Assemblies Used', '0', 0); END ELSE BEGIN DECLARE @ExternalAssembliesUsed as INT, @IS_ExternalAssembliesUsed as NVARCHAR(4); select @ExternalAssembliesUsed = COUNT(*) from sys.server_permissions where permission_name = 'External access assembly' and state='G'; IF @ExternalAssembliesUsed > 0 SET @IS_ExternalAssembliesUsed = '1' ELSE SET @IS_ExternalAssembliesUsed = '0' ; INSERT INTO #FeaturesEnabled VALUES ( 'External Assemblies Used', @IS_ExternalAssembliesUsed, ISNULL(@ExternalAssembliesUsed,0) ); END --CLR Enabled BEGIN exec('INSERT INTO #FeaturesEnabled SELECT ''IsCLREnabled'', CONVERT(NVARCHAR(255), value_in_use), CONVERT(int, value_in_use) FROM sys.configurations WHERE name = ''clr enabled'''); END --Linked Servers IF @CLOUDTYPE = 'AZURE' BEGIN INSERT INTO #FeaturesEnabled VALUES ( 'IsLinkedServersUsed', '0', 0); END ELSE BEGIN exec('INSERT INTO #FeaturesEnabled SELECT ''IsLinkedServersUsed'', CONVERT(NVARCHAR(255), COUNT_BIG(*)), CONVERT(NVARCHAR(255), COUNT_BIG(*)) FROM sys.servers WHERE is_linked = 1'); END --Policy based management BEGIN TRY exec('DECLARE @PoliciesEnabled_value as INT, @IS_PoliciesEnabled as NVARCHAR(4); SELECT @PoliciesEnabled_value = count(*) FROM msdb.dbo.syspolicy_policies where is_enabled =1; IF @PoliciesEnabled_value > 0 SET @IS_PoliciesEnabled = ''1'' ELSE SET @IS_PoliciesEnabled = ''0'' ; INSERT INTO #FeaturesEnabled VALUES ( ''Policy-Based Management'', @IS_PoliciesEnabled, ISNULL(@PoliciesEnabled_value,0) );'); END TRY BEGIN CATCH IF ERROR_NUMBER() = 40515 AND ERROR_SEVERITY() = 15 AND ERROR_STATE() = 1 exec('INSERT INTO #FeaturesEnabled VALUES (''Policy-Based Management'', ''0'', 0)') END CATCH /* Certain clouds do not allow access to certain tables so we need to catch the table does not exist error and default the setting */ BEGIN BEGIN TRY exec('INSERT INTO #FeaturesEnabled SELECT ''IsBufferPoolExtensionEnabled'', CASE WHEN state = 0 THEN ''0'' WHEN state = 1 THEN ''0'' WHEN state = 2 THEN ''1'' WHEN state = 3 THEN ''1'' WHEN state = 4 THEN ''1'' WHEN state = 5 THEN ''1'' ELSE ''0'' END, CASE WHEN state > 0 THEN 1 ELSE 0 END FROM sys.dm_os_buffer_pool_extension_configuration /* SQL Server 2014 (13.x) above */'); END TRY BEGIN CATCH IF ERROR_NUMBER() = 208 AND ERROR_SEVERITY() = 16 AND ERROR_STATE() = 1 exec('INSERT INTO #FeaturesEnabled SELECT ''IsBufferPoolExtensionEnabled'', ''0'', 0 /* SQL Server 2014 (13.x) below */'); END CATCH END SELECT '"' + @PKEY + '"' as PKEY, '"' + CONVERT(NVARCHAR(MAX), f.Features) + '"' as Features, '"' + CONVERT(NVARCHAR(MAX), f.Is_EnabledOrUsed) + '"' as Is_EnabledOrUsed, '"' + CONVERT(NVARCHAR(MAX), f.Count) + '"' as Count , '"' + @DMA_SOURCE_ID + '"' as dma_source_id, '"' + @DMA_MANUAL_ID + '"' as dma_manual_id FROM #FeaturesEnabled f; IF OBJECT_ID('tempdb..#FeaturesEnabled') IS NOT NULL DROP TABLE #FeaturesEnabled; IF OBJECT_ID('tempdb..#myPerms') IS NOT NULL DROP TABLE #myPerms;