如何在ANSI_NULLS设置为OFF的情况下远程更改ANSI_NULLS以执行过程或迁移过程

时间:2013-07-02 07:25:06

标签: sql sql-server tsql sql-server-2005

我知道有很多关于将存储过程迁移或同步到另一台服务器的主题,无论如何,我无法找到一些可接受的答案来解决以下问题。

我想通过脚本将ANSI_NULL值设置为OFF的存储过程迁移。 我想要迁移的过程示例:

USE [myDB]
GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[p_test_ansi_nulls] AS
SELECT CASE WHEN NULL = NULL THEN 'haha' ELSE 'no-haha' END h

ANSI_NULLS值存储在sys.sql_modules表中,但不存在于过程本身中。我尝试使用标头创建语句(包括SET ANSI_NULLS OFF字符串)并通过sp_executesql执行,但出现错误:

'CREATE / ALTER PROCEDURE'必须是查询批处理中的第一个语句。

那么有什么办法,如何使用此选项将程序迁移到另一台服务器或如何远程更改此设置? (程序非常复杂,因此我们无法更改代码..)

1 个答案:

答案 0 :(得分:1)

完全按照你在那里写的方式去做。

SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[p_test_ansi_nulls] AS
SELECT CASE WHEN NULL = NULL THEN 'haha' ELSE 'no-haha' END h

这将创建ANSI_NULLS关闭的程序:

SQLFiddle DEMO

此外,请注意 - 来自msdn:http://msdn.microsoft.com/en-us/library/ms188048.aspx

  

在SQL Server的未来版本中,ANSI_NULLS将始终为ON,并且将选项明确设置为OFF的任何应用程序都将生成错误。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。