【问题标题】:Stop SQL Server Management Studio from adding ANSI_NULLS and QUOTED_IDENTIFIER停止 SQL Server Management Studio 添加 ANSI_NULLS 和 QUOTED_IDENTIFIER
【发布时间】:2011-12-09 00:07:30
【问题描述】:

当我右键单击/修改时,如何防止 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' )

【问题讨论】:

  • 我找不到这样做的方法(你希望它们出现在Tools -> Options -> SQL Server Object Explorer -> Scripting),但你可能不想删除它们(它们给你带来了什么问题?)
  • 是的,看起来应该是这个地方。它很烦人。它们给我带来的唯一问题是它们是不必要的并且浪费空间。我更新了问题以进一步解释。

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


【解决方案1】:

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

如果您从具有与创建/定义存储过程时使用的不同ANSI_NULLS 选项值的连接创建/更改存储过程,那么您更改该存储过程的行为,永久!

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

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

【讨论】:

  • 如果有人不明白他们在做什么,也许这些设置会很有用。并且通过删除它们,如果我的默认值与 proc 不同,我只会更改存储过程的定义。如果有人知道他们行为的后果,他们应该能够消除这些后果。这些未来的默认值甚至无法更改。我更新了我的问题以更好地解释这一点。 +1 以获得良好的概览。
  • @ThinkingStiff - 不同之处在于,始终编写脚本的设置是在创建存储过程时捕获的 - 它们实际上是过程定义的一部分,而任何其他设置都是在运行时评估,当过程执行时。
  • 是的,我编辑了我的评论,意识到这些不是很好的例子。
  • 我越想,您的评论“程序定义的一部分”就很有意义。由于它在过程本身的定义表中,它与sql代码本身一样重要。我完全不同意这些设置中的任何一个都是超级重要,我永远不希望 SSMS 停止编写这些脚本,或者它们甚至应该在该表中,因为在不久的将来它们将永远存在ON。但是因为它们是代码的一部分而插入它们是有道理的,并解释了为什么它们不能“关闭”。
  • 只是一个意见,但我认为这很烦人。我们应该被允许做出选择。这就像 SELECT * 总是被扩展为一个列列表。我理解它背后的原因,但我希望能够选择不让它发生。
猜你喜欢
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
  • 2010-10-08
  • 1970-01-01
相关资源
最近更新 更多