在插入表格时使用表的IDENT_CURRENT()

时间:2013-10-31 14:38:01

标签: sql sql-server

我有一个现有的表,它有一个标识列和一个具有约束的列,以确保它与标识列中的值匹配。
(我知道这不是一个好的设计,但它是一张旧表,目前无法改变)

我知道我可以在插入过程中使用IDENT_CURRENT('mytable')作为值,将新创建的标识值放入另一列(FakeID)。

INSERT INTO MyTable (FakeID)
SELECT IDENT_CURRENT('MyTable')

我已经看到插入多条记录时出现问题,但是对于这种情况,我只插入一条记录。

我的问题是这是多么安全使用?
主要是,在不同会话或不同范围内进行插入是否存在风险? 此外,当表被截断时,这是否按预期运行?

欢迎任何其他建议。

1 个答案:

答案 0 :(得分:0)

SCOPE_IDENTITY()在这里将是一个更安全的赌注。如果有人在此部分事务运行之前插入表中,IDENT_CURRENT将从另一个事务中获取新生成的Id。

所以我会声明一个变量并将其值设置为SCOPE_IDENTITY(),类似这样

DECLARE @Id INT
SET @Id = SCOPE_IDENTITY()

INSERT INTO MyTable (FakeID) 
SELECT @Id

以下是类似问题的一些帖子:

http://bytes.com/topic/sql-server/answers/471026-ident_current-problem IDENT_CURRENT equivalent for current session