在 SQL 插入时,将新行的分配 ID 写入第二列



假设我有下表

| id | name   | anchorId |
|----|--------|----------|
| 1  | Robert | 1        |
| 2  | William| 2        |
| 3  | Bob    | 1        |

基本上,假设添加了一个新行

| id | name   | anchorId |
|----|--------|----------|
| 1  | Robert | 1        |
| 2  | William| 2        |
| 3  | Bob    | 1        |
| 4  | Billy  | 4        |

在我能把Billy的anchorId设置为2之前,我希望它能指代自己。也就是说,在插入时,如果未指定,如何将anchorId设置为新分配的id?

一些选择(最优惠的第一个IMO)

  1. 将新插入的anchorId设置为NULL,而不是设置为行ID。这是表示这一点的常用方法
  2. 使用序列而不是IDENTITY-然后可以将idanchorId的默认值设置为来自序列,并且两者都将被分配相同的值
  3. 如果使用IDENTITY,则需要执行INSERT,然后对新插入的值执行立即UPDATE(使用触发器中从SCOPE_IDENTITY()OUTPUT子句或INSERTED表返回的IDENTITY值)

2的代码

CREATE SEQUENCE S1 AS INT START WITH 1;
CREATE TABLE T1
(
id INT NOT NULL DEFAULT NEXT VALUE FOR S1,
name varchar(50),
anchorid INT  NOT NULL DEFAULT NEXT VALUE FOR S1
)
INSERT INTO T1 (name) VALUES ('foo');
SELECT *
FROM T1

最新更新