我有一个现有的表,它有一个标识列和一个具有约束的列,以确保它与标识列中的值匹配。
(我知道这不是一个好的设计,但它是一张旧表,目前无法改变)
我知道我可以在插入过程中使用IDENT_CURRENT('mytable')作为值,将新创建的标识值放入另一列(FakeID)。
INSERT INTO MyTable (FakeID)
SELECT IDENT_CURRENT('MyTable')
我已经看到插入多条记录时出现问题,但是对于这种情况,我只插入一条记录。
我的问题是这是多么安全使用?
主要是,在不同会话或不同范围内进行插入是否存在风险?
此外,当表被截断时,这是否按预期运行?
欢迎任何其他建议。
答案 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