在 SQL Server 2008R2/2012 中禁用 SET 语句/强制 SET 选项

DLA*_*014 6 permissions sql-server-2008-r2 configuration sql-server-2012

我目前正在使用 MSSQL 2008R2 数据库,该数据库经常使用以下 SET 命令:

SET ANSI_NULLS { ON | OFF }
SET QUOTED_IDENTIFIER { ON | OFF }
SET ANSI_PADDING { ON | OFF }
Run Code Online (Sandbox Code Playgroud)

在研究这些设置时,我偶然发现了 Microsoft 技术网(链接)上有关 ANSI_NULLS 的以下说明:

在 Microsoft SQL Server 的未来版本中,ANSI_PADDING 将始终为 ON,并且任何将该选项显式设置为 OFF 的应用程序都将产生错误。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。

因此,我想强制执行“全局”设置。我一直在寻找一天中最好的部分,但据我所知,您可以随时更改这些设置。为了完全确定我想问这里:

是否可以强制执行 ANSI_NULLS ON 之类的设置或禁用在“任何”级别更改这些设置的可能性。我想用它来测试如果禁用将特定选项设置为 OFF 的能力,数据库是否会“存活”。

我希望我能够描述我的问题。这不是我的母语。提前致谢。

PS:在 StackOverflow 上,我也被建议在这里问这个问题。原问题:这里

Mar*_*ith 7

没有办法强制执行全局设置或阻止人们跑步

SET ANSI_NULLS OFF
SET ANSI_PADDING OFF
Run Code Online (Sandbox Code Playgroud)

您可以通过运行快速了解您的应用程序是否正在使用任何已弃用的功能

SELECT *
FROM   sys.dm_os_performance_counters
WHERE  object_name LIKE '%Deprecated%'
       AND cntr_value > 0
ORDER  BY cntr_value DESC 
Run Code Online (Sandbox Code Playgroud)

如果您确实发现了关注的领域,那么您可以设置一个服务器端跟踪来捕获弃用事件。

在此处输入图片说明

这还会返回违规批次的会话 ID 和 SQL 句柄,以便您在确实看到任何事件时进行进一步调查。

一种稍微复杂的方法是设置一个通知过程来更快地检索与 SQL 句柄关联的文本,以降低在您开始分析结果时有问题的 SQL 不再在缓存中的可能性。

或者您可以使用扩展事件来检索 TSQL 和事件。