我的表格ntext
列定义为[value1] [ntext] NOT NULL
。我想在此表中添加另一个ntext
列,该列基本上是此列值的副本(它们不需要保持同步)。为此,我使用以下SQL:
ALTER TABLE [table] ADD [value2] [ntext] NULL
UPDATE [table] SET [value2] = [value1]
ALTER TABLE [table] ALTER COLUMN [value2] [ntext] NOT NULL
这在SQL Server 2005和2008中都可以正常工作,但是我还需要它在SQL Server 2000中工作。根据BOL,ALTER TABLE
不能在SQL Server 2000中的ntext
列上使用。需要最后的alter table,因为该列必须定义为NOT NULL
。
有没有办法在SQL Server 2000中实现这一点,而无需创建新表,复制所有行,删除旧表,然后重命名新表?该表有很多外键和约束,我真的不想拆开和重新创建。
(我知道ntext已被弃用 - 这是对遗留应用程序进行更改的一部分,必须暂时使用它们。)
答案 0 :(得分:3)
使用value2列的默认值怎么样?像这样......
ALTER TABLE [table]
ADD [value2] [ntext] NOT NULL
CONSTRAINT df_table_value2 DEFAULT ''
UPDATE [table] SET [value2] = [value1]
如果您愿意,可以删除默认约束
答案 1 :(得分:0)
没有冒犯,但你声明value1被定义为NOT NULL,所以为什么你甚至需要将value2列设置为首先允许空值。如果你必须将列NOT NULL,那么将它设为NOT NULL并一起删除第二个alter table命令。
根据您的示例,无论如何都不能有NULL值。
现在,如果您的源允许空值而您的新列不是,则可以在UPDATE语句中包含where子句以排除NULL值。