2

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

我想迁移通过脚本将 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' 必须是查询批处理中的第一条语句。

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

4

1 回答 1

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 演示

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

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

于 2013-07-02T07:40:19.507 回答