【问题标题】:SQL Server 2008::How to use ALTER TABLE to add a new column that has unique number for every unique value in another columnSQL Server 2008::如何使用 ALTER TABLE 添加一个新列,该列对另一列中的每个唯一值具有唯一编号
【发布时间】:2016-07-07 17:00:12
【问题描述】:

为了更清楚,我有一张这样的表

 Batch  domain
 ---------------
  14    xyz.com  
  14    abc.com  
  15    abc.com  
  15    xyz.com

我想要第三列,每个域都有唯一的编号,不管它们来自哪个批次。

【问题讨论】:

    标签: sql-server-2008 alter-table


    【解决方案1】:

    通常,您永远不会通过添加列来做到这一点。您需要为具有名为 DomainID 的标识字段的域添加一个表。然后 Batch 域表存储的是 ID 而不是域名,它加入到域表中以获取名称。

    【讨论】:

    • 我完全理解你的意思,我通常会这样做,但由于当前的数据库条件,我想通过添加一列而不是创建另一个表来解决这个问题。
    • 那么你唯一的选择就是通过触发器来维护它并确保处理竞争条件。
    【解决方案2】:

    要回答您的问题,可以使用NEWID()NEWSEQUENTIALID()

    请注意,作为函数,Newid 可以通过触发器/存储过程/查询来调用,但 NEWSEQUENTIALID 只能设置为 DEFAULT 类型的列的值 uniqueidentifier

    两者都有限制,如果发生中断,可以猜测 SEQUENTIAL ID 或导致集群,但如果安全性不是该值的问题,则可以管理。

    ALTER TABLE [Schema_Name].[Table_Name]
    ADD DomainID uniqueidentifier DEFAULT (NEWSEQUENTIALID() )
    

    虽然已经过时,但Dave Pinal 在两者之间有很好的解释。

    【讨论】:

    • 添加列数据类型
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    相关资源
    最近更新 更多