【问题标题】:update table rows with different values更新具有不同值的表行
【发布时间】:2014-05-06 22:50:51
【问题描述】:

我有一个名为 Customer 的表,其中包含多个字段,例如 FirstName、LastName、Birthdate。稍后我添加了一个新字段 CustomerId。 我想给这张表的每一行加一个序号,怎么办?

CustomerId 应以 1000000 开头。

有些行已经有一个 CustomerId,一个小于 1000000 的数字。

我正在考虑创建一个带有循环的过程,其中变量增加 1。

CREATE myFunction()
@id int = 1000000
BEGIN
    FOR EACH row in [tablename]
    BEGIN
       IF CustomerId is null then CustomerId = @id
       SET @id = @id + 1
    END    
END;

【问题讨论】:

  • 结果如何?成功了吗?

标签: sql sql-server


【解决方案1】:

只需将新列添加为标识,SQL Server 就会自动使用顺序递增的整数填充它。

 Alter Table {TABLENAME} 
 ADD CustomerId Identity (100000, 1) Integer NOT NULL

由于您提到某些列已经有一个 CustomerId,那么我将使用上面的内容添加另一个新列,具有不同的名称,然后执行更新查询以更新现有的 CustomerId 列,该列未填充任何内容您需要采取的方式与您的要求保持一致(是否可以重复?如果不是,您可以更改那些现有的 CustomerId 值吗?如果不是,当发生冲突时其他值应该是什么?等等。

【讨论】:

  • 但是我想选择数字序列,我希望它以 100000 开头。并且有些行已经有一个 CustomerId。
  • 然后添加标识种子值 = 100000 的新列。请参阅此链接 msdn.microsoft.com/en-us/library/ms186775.aspx
  • 我该如何处理 CustomerId 中已经有值的行?
  • 你想/需要用它们做什么?这里没有人能回答这个问题。这取决于您的系统的要求。这些值是否在某处用作外键?他们可以改变吗?很多事情都会影响到这一点。
【解决方案2】:

正如查尔斯所说,您可以添加身份列。

这样做:

alter table CUSTOMERS
add ID int Identity(1,1) constraint PK_Customers primary key

您也可以这样做,而无需将其设置为主键

alter table CUSTOMERS
add ID int Identity(1,1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多