有没有一种方法可以将自动递增的标识int列自动复制到另一列?

时间:2019-10-30 14:23:49

标签: sql-server

有没有一种方法可以将自动递增的标识int列自动复制到另一列?

create table dbo.CopyOfIdColumn
(
myIdCol int identity(1,1)
,copyOfMyIdCol int Default (I WANT THE DEFAULT TO BE WHATEVER THE VALUE OF myIdCol IS)
)

我知道我可以包装存储过程,并只使用Best way to get identity of inserted row?帖子中的内容(可能是SCOPE_IDENTITY())基于插入的记录来更新条目,但是我希望有一种更简单/更轻松的方法。 / p>

谢谢。

更新: 根据Panagiotis Kanavos的建议,更新问题以更好地表明我想要实现的目标。

我想做的是有一列,指示行的父级(通常是其自身)。我希望该列不具有空值。
我也不要多余的桌子。父母和孩子有相同的数据,我不想有一个只包含parentIds的表。他的建议是,我可以使用默认约束来实现这一目标。

2 个答案:

答案 0 :(得分:0)

您可以创建一个序列,然后在插入的行中使用它,例如:

CREATE SEQUENCE Schema.Sequence
    AS int  
    INCREMENT BY 1 ;

您的插入内容如下:

DECLARE @NextID int ;  
SET @NextID = NEXT VALUE FOR Schema.Sequence;  
-- Some work happens  
INSERT Test.Orders (OrderID, ColumnWithID, Name, Qty)  
    VALUES (@NextID, @NextID, 'Rim', 2) ;  
GO 

答案 1 :(得分:0)

使用如下计算字段:

create table #temp
(
myIdCol int identity(1,1),
othercolumn varchar(20),
copyOfMyIdCol as myIdCol 
)

--TESTING
insert into #temp (othercolumn)
values('a'),('b')


select * from #temp