使用ALTER

时间:2017-05-26 13:48:25

标签: sql sql-server ssms ssms-2012

我需要在表的现有字段上将ANSI PADDING从ON变为OFF,而不创建新表。有没有办法通过ALTER命令执行此操作?

谢谢!

1 个答案:

答案 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的能力已被弃用,这是有充分理由的。现在几乎所有内容都要OFFANSI_PADDING,因此将ON用于特定列可能会破坏不期望它的客户。即使你认为你现在正在解决一个问题,你将来可能会遇到更大的问题。

OFF仅适用于非常旧的软件的兼容性调整,而这些软件只是不知道更好(并且可能希望使用ANSI_PADDING创建整个数据库)。不要在新开发中使用它,当然也不能将它用于一个专栏。