Firebird:如何从新添加的生成器为现有行分配id

时间:2010-05-30 08:59:06

标签: sql firebird

我有一个表已经包含一些行,并且没有主键。

我想现在添加一个主键,但为此我需要为现有行的主键字段设置唯一值。如何使用新添加的生成器来完成?

1 个答案:

答案 0 :(得分:5)

主键本身不会生成任何值。这是约束。在您的示例中,您需要做下一步:

  1. 为PK值添加列,声明它为NOT NULL
  2. 使用唯一值填写列
  3. 创建PK约束
  4. 示例:

    CREATE TABLE test (a varchar(20));
    
    COMMIT;
    
    INSERT INTO test (a) VALUES ('A');
    INSERT INTO test (a) VALUES ('B');
    INSERT INTO test (a) VALUES ('C');
    
    COMMIT;
    
    ALTER TABLE test ADD pk INTEGER NOT NULL;
    
    CREATE GENERATOR g_test;
    
    COMMIT;
    
    UPDATE test SET pk = GEN_ID(g_test, 1);
    
    ALTER TABLE test ADD CONSTRAINT test_pk
      PRIMARY KEY (pk);