向现有表格添加新列,其值等于ID。

4

在我的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个回答

15

为什么要通过循环表格来做更新呢?只需要这样做:

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

UPDATE Status 
SET Status_Code = Status_ID 

6
创建新列,并将其设置为可空。
然后编写一个简单的更新语句,将现有的id插入到新列中。
然后将您的列设置为不可空。

0
我会选择 Gerrie 的答案,因为你想让列不为空。如果你指定了默认值,SQL Server 仍然允许在任何后续的插入语句中省略该列(该列将被赋予默认值)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接