我正在研究一个项目,问题出现了:插入语句可以将自己的身份插入另一个字段吗?
这个想法是记录的层次排列,“父”字段指向父记录的ID,而给定树的“顶部”记录只指向自身。
我们当然可以为父母留空,或者稍后再回来插入其ID。但我想知道是否有任何SQL Server操作在插入记录时将IDENTITY插入另一个字段?
编辑:或者有没有办法将字段的默认值指定为另一个字段的值?这也将解决这个问题。
编辑:默认字段是另一个字段似乎已经回答了,答案是否定的,使用触发器。当然,这对约束和非空字段的问题没有帮助。 (http://social.msdn.microsoft.com/Forums/en/sqltools/thread/661d3dc8-b053-47b9-be74-302ffa11bf76)
答案 0 :(得分:0)
没有。对于此类层次结构,除非您使用ID
插入显式SET IDENTITY_INSERT ON
值,否则需要先插入顶层并使用SCOPE_IDENTITY
或OUTPUT
子句来插入ID
用于下一级别。
答案 1 :(得分:0)
在某种程度上你可以。 Insert允许OUTPUT子句,OUTPUT可以重定向到一个表,该表可以与您当前插入的表相同。以下示例插入父节点,但它还会在插入期间自动插入将parent_id设置为新生成的ID的子节点:
create table hierarchy (
id int identity(1,1) not null primary key,
parent_id int null,
somefield varchar(100));
insert into hierarchy (parent_id, somefield)
output inserted.id, 'child'
into hierarchy (parent_id, somefield)
values (null, 'parent');
select * from hierarchy;
我最终没有看到任何实际用途,这更像是一场表演帽子戏法。