更改数据库中所有存储过程的ANSI_NULLS设置

Mar*_*eli 5 sql-server stored-procedures

我们在ANSI_NULLS设置和计算列方面存在一些问题,我们有大量的存储过程

SET ANSI_NULLS OFF
Run Code Online (Sandbox Code Playgroud)

我们想要将它们全部改为

SET ANSI_NULLS ON
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以做到这一点,或者我必须将所有SP提取到脚本,更改它并再次运行它以删除并重新创建所有SPa

Ian*_*oyd 4

您必须编写所有过程的脚本,并在启用 ANSI_NULLS 的情况下重新创建它们。

如果我有很多事情要做,我可能会向我的客户端应用程序添加一个功能。

伪代码:

procedure FixAllStoredProcedureAnsiNullness(connection)
{
   Strings spNames = GetStoredProcedureNames(connection);

   foreach spName in spNames
   {
       String sql = GetStoredProcedureSQL(connection, spName);

       //turn on option for remainder of connection
       connection.ExecuteNoRecords("SET ANSI_NULLS ON"); 

       BeginTransaction(connection);
       try
          connection.ExecuteNoRecords("DROP PROCEDURE "+spName);
          connection.ExecuteNoRecords(sql);
          CommitTranasction(connection);
       except
          RollbackTransaction(connection);
          raise;
       end;
   }
}
Run Code Online (Sandbox Code Playgroud)

我有关于如何在SQL Server 上以编程方式获取存储过程的 SQL 的代码:如何在没有 DMO/SMO 的情况下生成对象脚本?

但通常我只会使用Enterprise Manager,从存储过程列表的顶部开始:

  1. Return
  2. Ctrl+Home
  3. Ctrl+V
  4. 单击“确定”
  5. Down
  6. 转到1

我的剪贴板包含:

SET ANSI_NULLS ON
GO
Run Code Online (Sandbox Code Playgroud)

如果您不幸被 SSMS 困住,那么您就可以使用 POS、IIRC。TWSS。