0

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

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

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

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

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

欢迎任何其他建议。

4

1 回答 1

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 等效项

于 2013-10-31T15:02:23.163 回答