2013-07-02 35 views
2

我知道有很多關於將存儲過程遷移或同步到另一個服務器的主題,無論如何,我無法找到以下問題的一些可接受的答案。如何遠程更改ANSI_NULLS或使用ANSI_NULLS設置關閉的遷移過程

我想通過腳本將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

完全按照您在那裏寫的方式進行。

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

In a future version of SQL Server, ANSI_NULLS will always be ON and any applications that explicitly set the option to OFF will generate an error. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

+0

感謝您的回答,但是這不是一個選項,因爲我需要通過遠程機器上的腳本來做到這一點,而不是手動。 – kafe

+0

@kafe這是一個問題在腳本中如何? –

+0

這取決於你的意思Nenad是什麼樣的腳本。如果我將所有內容放在一個字符串中並遠程執行,則會出現「CREATE/ALTER PROCEDURE」錯誤(上圖)。我不知道有任何其他方式,如何編寫腳本(可能要通過sqlcmd存入文件並執行,但我無法更改服務器上的xpcmdshell) – kafe

相關問題