识别当前插入的行

时间:2011-08-23 23:07:49

标签: sql-server insert identity identity-column

我正在研究一个项目,问题出现了:插入语句可以将自己的身份插入另一个字段吗?

这个想法是记录的层次排列,“父”字段指向父记录的ID,而给定树的“顶部”记录只指向自身。

我们当然可以为父母留空,或者稍后再回来插入其ID。但我想知道是否有任何SQL Server操作在插入记录时将IDENTITY插入另一个字段?

编辑:或者有没有办法将字段的默认值指定为另一个字段的值?这也将解决这个问题。

编辑:默认字段是另一个字段似乎已经回答了,答案是否定的,使用触发器。当然,这对约束和非空字段的问题没有帮助。 (http://social.msdn.microsoft.com/Forums/en/sqltools/thread/661d3dc8-b053-47b9-be74-302ffa11bf76

2 个答案:

答案 0 :(得分:0)

没有。对于此类层次结构,除非您使用ID插入显式SET IDENTITY_INSERT ON值,否则需要先插入顶层并使用SCOPE_IDENTITYOUTPUT子句来插入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;

我最终没有看到任何实际用途,这更像是一场表演帽子戏法。