【问题标题】:Can you define a new column in a SQL Server table which auto-generates Unique Identifiers for new rows?您能否在 SQL Server 表中定义一个新列,为新行自动生成唯一标识符?
【发布时间】:2012-07-19 13:40:31
【问题描述】:

SQL Server 中的自动增量列会自动填充;是否可以在不使用触发器的情况下定义一个 UniqueIdentifier 列以在插入时自动生成?

这将是表上的辅助唯一键。我需要创建它,因为我们现在需要一个可以在查询字符串中使用的公共主键。

旧版基础架构仍然依赖于旧的 int 主键。鉴于旧的基础架构首先创建了记录,我希望 SQL Server 在插入时透明地创建辅助 GUID 键 - 如果可能的话。

非常感谢

【问题讨论】:

    标签: sql sql-server tsql sql-server-2012


    【解决方案1】:

    您可以使用具有唯一标识符类型的列,默认值为 NEWID()

    【讨论】:

    • 或者更好:默认为NEWSEQUENTIALID() 以减少索引碎片......
    • 我已经尝试过 ALTER TABLE dbo.tblUser ADD Guid uniqueidentifier NULL DEFAULT newid() 这是你的意思吗?
    • 哦,对不起,我在 SSMS 中尝试过,但查询失败,但是当它通过后端时,它可以工作。我的错,谢谢!
    【解决方案2】:

    如果您将默认值为 NEWID() 的列添加到表中,然后更新现有行以具有新的 id。你可能会

    --  Create test table
    CREATE TABLE Test1
    (
    ID int IDENTITY(1,1)
    ,Txt char(1)
    );
    
    -- Insert data
    INSERT INTO Test1(Txt)
    SELECT 'a' UNION ALL
    SELECT 'b' UNION ALL
    SELECT 'c' UNION ALL
    SELECT 'd' UNION ALL
    SELECT 'e';
    
    -- Add column
    ALTER TABLE Test1
    ADD GlobalID uniqueidentifier DEFAULT(NEWID());
    
    -- View table, default value not added for existing rows
    SELECT *
    FROM Test1;
    
    -- Update null ids with guids
    UPDATE Test1
    SET GlobalID = NEWID()
    WHERE GlobalID IS NULL
    
    -- Insert new data
    INSERT INTO Test1(Txt)
    SELECT 'f' UNION ALL
    SELECT 'g' UNION ALL
    SELECT 'h' UNION ALL
    SELECT 'i' UNION ALL
    SELECT 'j';
    
    -- View table
    SELECT *
    FROM Test1;
    
    -- Drop table
    DROP TABLE Test1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      相关资源
      最近更新 更多