我需要在表的现有字段上将ANSI PADDING从ON变为OFF,而不创建新表。有没有办法通过ALTER命令执行此操作?
谢谢!
答案 0 :(得分: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;
但是,如果你重视自己的理智,就不要这样做。重写想要这样的客户端代码,以便它自己进行适当的修剪,因为{J}设置为ANSI_PADDING
的能力已被弃用,这是有充分理由的。现在几乎所有内容都要OFF
为ANSI_PADDING
,因此将ON
用于特定列可能会破坏不期望它的客户。即使你认为你现在正在解决一个问题,你将来可能会遇到更大的问题。
OFF
仅适用于非常旧的软件的兼容性调整,而这些软件只是不知道更好(并且可能希望使用ANSI_PADDING
创建整个数据库)。不要在新开发中使用它,当然也不能将它用于一个专栏。