将新列添加到现有表,其值等于ID

时间:2010-11-09 07:49:38

标签: sql sql-server

在sql-server 2005实例的数据库中,我需要向包含现有数据的表添加新列。该表目前看起来像这样:

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

这个脚本似乎完美无缺。但是,对于一项相当小的任务来说,似乎有很多代码。有没有人知道一种更有效的代码编码方法?

3 个答案:

答案 0 :(得分:8)

为什么要遍历表格进行更新?就这样做:

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

UPDATE Status 
SET Status_Code = Status_ID 

答案 1 :(得分:3)

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

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

然后让你的专栏不可为空。

答案 2 :(得分:0)

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