2010-01-06 60 views
3

我有一個表,其中ntext列定義爲[value1] [ntext] NOT NULL。我想向此表添加另一個ntext列,該表基本上是此列值的副本(它們不需要保持同步)。要做到這一點,我使用的SQL語句:如何將ntext列的值複製到新的非空列

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已被棄用 - 這是一個改變到具有使用它們暫時遺留應用程序的一部分。)

回答

3

如何使用value2列的默認值?這樣的事情...

ALTER TABLE [table] 
ADD [value2] [ntext] NOT NULL 
CONSTRAINT df_table_value2 DEFAULT '' 

UPDATE [table] SET [value2] = [value1] 

,如果你想

+0

我曾嘗試在創建列時設置默認值,但它工作正常,但我並不樂意讓列的默認值沒有意義。之後我沒有想過去除默認約束 - 很好的解決方法。 – adrianbanks 2010-01-06 12:58:11

0

沒有違法,但你指出值1被定義爲NOT NULL,那麼爲什麼你甚至需要設置value2列以允許空位。如果你必須有NOT NULL列,那麼把它設爲NOT NULL,並且一起擺脫第二個alter table命令。

根據你的例子,你無論如何都不能有NULL值。

現在,如果您的源允許使用空值,並且您的新列不能在UPDATE語句中包含where子句以排除NULL值。

+0

我必須將其設置爲允許空值入手,因爲該表已經在它行您可以再刪除默認約束。如果我將其聲明爲NOT NULL,則現有值對此列沒有值,並且我無法添加該列。 – adrianbanks 2010-01-06 12:42:31

+0

的基礎上,我會使用上面建議的默認約束。 – 2010-01-06 12:50:09