阻止SQL Server Management Studio添加ANSI_NULLS和QUOTED_IDENTIFIER

时间:2011-12-09 00:07:31

标签: sql-server sql-server-2008-r2 ssms sql-server-2008

当我右键单击/修改时,如何阻止SQL Management Studio(10.50.2500.0)将其添加到每个存储过程的开头?

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

这些设置都不适合我。 ANSI_NULLS ON和QUOTED_IDENTIFIER ON在我所有的服务器,数据库和连接上设置。除此之外,我从不使用双引号(我使用括号作为保留字)和所有可空字段我在需要时正确使用IS NULL。

每次编辑程序时都会删除设置。我的所有程序都已正确设置,并且在我的环境中永远不会改变。验证:

SELECT uses_ansi_nulls, uses_quoted_identifier
FROM sys.sql_modules
WHERE object_id = object_id( 'proc_name' )

1 个答案:

答案 0 :(得分:8)

不确定这是一个答案还是一个无用的答案,但正如Damien_The_Unbeliever建议你绝对不希望SSMS停止编写这些行的脚本。因为它们位于sql_modules表中,所以它们与SQL代码本身一起构成了存储过程定义的组成部分。因此,它们不能像SQL代码那样“关闭”。

如果从与创建/定义存储过程时使用的ANSI_NULLS选项值不同的连接创建/更改存储过程,则更改该存储过程的行为< / em>,永久!

正是出于这个原因,SSMS(以及任何一半不错的SQL对象脚本工具)将始终输出这些行 - 因为如果你删除它们或更改它们,你正在改变它的定义存储过程(特别是删除它们是不好的,因为这意味着存储过程的行为,取决于它发布的连接,可能会有所不同)。

快速谷歌搜索“ANSI_NULLS QUOTED_IDENTIFIER存储过程”,最高结果是以下文章似乎解释了选项及其影响,非常清楚:http://ranjithk.com/2010/01/10/understanding-set-quoted_identifier-onoff/