2010-11-09 151 views
3

在sql-server 2005实例的数据库中,我需要向包含现有数据的表添加新列。该表目前如下所示:在现有表中添加一个新列,其值等于ID

CREATE TABLE [dbo].[Status](
    [Status_ID] [int] IDENTITY(1,1) NOT NULL, 
    [Description] [nvarchar](80) COLLATE Latin1_General_CI_AS NOT NULL 
) 

我想要添加的列也是INT类型,并且不允许有空值。此外,我希望该列的初始值等于该ID(它不能是计算列)。

这是我这个写的脚本:

ALTER TABLE [dbo].[Status] 
add Status_Code int NOT NULL DEFAULT 1 

GO 
//Get the number of rows 
DECLARE @RowCount INT 
SET @RowCount = (SELECT COUNT(Status_ID) FROM Status) 

//Create an iterator 
DECLARE @I INT 
SET @I = 1 

//Loop through the rows of a table @myTable 
WHILE (@I <= @RowCount) 
BEGIN 
     UPDATE Status 
     SET Status_Code = @I 
     WHERE Status_ID = @I 
     //Increment the iterator 
     SET @I = @I + 1 
END 

这个脚本似乎完美地工作。但是,对于一个相当小的任务来说,它似乎有很多代码。有谁知道更有效的方式来编码?

回答

6

为什么循环遍历表来做更新?只要这样做:

ALTER TABLE [dbo].[Status] 
add Status_Code int NOT NULL DEFAULT 1 

UPDATE Status 
SET Status_Code = Status_ID 
3

创建新列,并使其可以为空。

然后编写一个简单的更新语句,将现有的ID插入到新列中。

然后让你的列不可为空。

0

我会去与Gerrie的答案,因为你想列不为NULL。如果您指定了默认值,SQL Server仍然允许您在任何后续插入语句中忽略该列(该列将被分配默认值)

相关问题