Thi*_*iff 9 sql-server ssms sql-server-2008 sql-server-2008-r2
当我右键单击/修改时,如何阻止SQL Management Studio(10.50.2500.0)将其添加到每个存储过程的开头?
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Run Code Online (Sandbox Code Playgroud)
这些设置都不适合我.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' )
Run Code Online (Sandbox Code Playgroud)
不确定这是一个答案还是一个无用的答案,但正如Damien_The_Unbeliever建议你绝对不希望SSMS停止编写这些行的脚本.因为它们位于sql_modules表中,所以它们与SQL代码本身一起构成了存储过程定义的组成部分.因此,它们不能像SQL代码那样被"关闭".
如果从具有与ANSI_NULLS创建/定义存储过程时使用的选项值不同的选项值的连接创建/ 更改存储过程,则永久更改该存储过程的行为!
正是由于这个原因,SSMS(以及任何一半体面的SQL对象脚本工具)将始终输出这些行 - 因为如果你删除它们或更改它们,你就会改变存储过程的定义(删除它们,特别是很糟糕)因为这意味着存储过程的行为,取决于它发布的连接,可能会有所不同).
快速谷歌搜索"ANSI_NULLS QUOTED_IDENTIFIER存储过程",最高结果是下面的文章似乎解释了选项及其影响,非常清楚:http://ranjithk.com/2010/01/10/understanding-设置QUOTED_IDENTIFIER-ONOFF /