2017-05-26 53 views
0

我需要在表的現有字段上將ANSI PADDING從ON變爲OFF,而無需創建新表。有沒有辦法通過ALTER命令來做到這一點?使用ALTER設置ANSI填充關閉

謝謝!

+1

並且[documentation](https://docs.microsoft.com/en-us/sql/t-sql/statements/set-ansi-padding-transact-sql)非常清晰:「此設置僅影響新列的定義在創建列後,SQL Server將根據創建列時的設置存儲值,而現有列不會受到以後對此設置的更改的影響。 –

回答

0

不,只有ALTER沒有辦法做到這一點。像身份屬性,排序規則和其他一些位一樣,列是否應用ANSI填充不是事後可以改變的東西。

你仍然可以做沒有完全建立一個新表,但並非沒有創造新的列:

BEGIN TRANSACTION; 
SET ANSI_PADDING OFF; 
ALTER TABLE T ADD C_badpad CHAR(16) NULL; 
EXEC('UPDATE T SET C_badpad = C;') 
EXEC sp_rename 'T.C', 'C_old'; 
EXEC sp_rename 'T.C_badpad', 'C'; 
EXEC('ALTER TABLE T DROP COLUMN C_old;') 
ROLLBACK; -- COMMIT; 

但是,如果你珍惜你的理智,不這樣做。重寫需要的客戶端代碼,以便自己進行適當的修整,因爲具有ANSI_PADDING設置爲OFF的能力已被棄用,這是有充分理由的。現在幾乎所有東西都預計ANSI_PADDINGON,因此如果某個特定列的值爲OFF,可能會破壞不期望的客戶端。即使你現在認爲你正在解決一個問題,你將來可能會面臨更大的問題。

ANSI_PADDING只是作爲一個很老的軟件的兼容性調整,只是不知道更好的(並可能希望整個數據庫創建與ANSI_PADDING = OFF)。不要在新開發中使用它,當然不要只用於一列。