假设我有下表
| 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)
- 将新插入的
anchorId
设置为NULL
,而不是设置为行ID。这是表示这一点的常用方法 - 使用序列而不是
IDENTITY
-然后可以将id
和anchorId
的默认值设置为来自序列,并且两者都将被分配相同的值 - 如果使用
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