【问题标题】:Is there any way to set ansi_nulls on for multiple stored procedures at once with writing a script and not making changes to any system table?有没有办法通过编写脚本而不更改任何系统表来一次为多个存储过程设置 ansi_nulls?
【发布时间】:2019-04-16 13:29:46
【问题描述】:

我有大约 100 个关闭 ansi_nulls 的存储过程,我正在尝试将其设置为 ON。一种方法是我可以转到每个存储过程并设置属性>选项> ansi_nulls ON,也可以使用 ansi_nulls ON 修改它们中的每一个并编译它。但是对于数百个 SP 来说,这是非常耗时的。

我想有一种方法,我可以编写一个脚本来修改它们,打开 ansi_nulls 并在同一个脚本中执行它而不接触任何系统表。 好吧,我可以使用 sys 表来查询 SP 以列出我需要修改的它们。

感谢您的帮助,在此先感谢。

【问题讨论】:

  • 幸运的是,您不能批量执行此操作。现实情况是,您需要评估每个过程以确保在您打开 ANSI_NULLS 时逻辑正常。不确定您打算如何更改它,您无法在对象资源管理器中更改该属性。也不确定您打算如何使用 sys.tables 来告诉您需要更改哪些程序。
  • 同意肖恩。您确实需要检查每个存储过程并查看其逻辑是否依赖于关闭 ANSI_NULLs。这并不是你可以自动化的东西,甚至对于人类来说也很难确定——你所知道的是,围绕空值的一些行为可能会改变,但可能没有记录在所有情况下如何处理空值应该
  • 你为什么不想利用系统表来实现这一点?

标签: sql sql-server


【解决方案1】:

我会做什么,而且肯定不会耗费时间:

  1. 在 SQL Server Management Studio 中,右键单击对象资源管理器中的数据库,转到任务,然后生成脚本
  2. 选择“选择特定数据库对象”,勾选“存储过程”,点击下一步
  3. “设置脚本选项”屏幕上的默认值应该是好的(单个文件),除非您需要选择文件输出。单击下一步,然后再次单击下一步。生成文件需要一到五分钟。
  4. 打开在像 Notepad++ 这样的编辑器中生成的文本/SQL 文件。
  5. CREATE PROCEDURE 大量替换为ALTER PROCEDURE
  6. 如果在脚本中创建了SET ANSI_NULLS OFF,请将SET ANSI_NULLS OFF 替换为SET ANSI_NULLS ON
  7. 如果未创建 SET ANSI_NULLS OFF,请将 ALTER PROCEDURE 替换为 SET ANSI_NULLS ON\r\nGO\r\nALTER PROCEDURE 其中 \r\n 当然是回车换行组合。如果您的文本编辑器无法创建 CrLF,请使用更好的文本编辑器。

现在应该可以执行文本文件来纠正问题。 在运行整个程序之前对此进行测试。另外,请务必保留原始脚本的备份。

【讨论】:

  • 这在语法上很有效,但它很容易在你的代码中产生一些严重的逻辑问题,因为 NULL 突然被不同地处理了。我强烈建议您不要在不了解每个程序的细微差别的情况下这样做。
  • @UnhandledExcepsean 我已经尝试了您建议的方式,它对我来说非常适合。感谢您的解决方案。
猜你喜欢
  • 1970-01-01
  • 2011-01-09
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 2020-08-26
  • 1970-01-01
  • 2021-05-07
  • 1970-01-01
相关资源
最近更新 更多