如何将ntext列的值复制到新的非空列

时间:2010-01-06 11:56:49

标签: sql sql-server tsql sql-server-2000

我的表格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已被弃用 - 这是对遗留应用程序进行更改的一部分,必须暂时使用它们。)

2 个答案:

答案 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值。