如何在INSERT查询中插入IDENT_CURRENT?

时间:2013-08-31 00:38:11

标签: sql sql-server sql-server-2008 sql-insert

我正在MS SQL SERVER 2008中创建一个存储过程来进入客户端。这是我的代码的重要部分:

INSERT INTO Entity VALUES (@nameEnt, @iniEnt, @LastNEnt1, @suffixEnt);
INSERT INTO Patient VALUES (@housing, @dob, IDENT_CURRENT('Entity'));
INSERT INTO Direction VALUES (@postAdd, @city, @state, @zip, IDENT_CURRENT('Entity'));
INSERT INTO PatientSecure VALUES (IDENT_CURRENT('Patient'), @idSecure, @contractNo, @groupNo, @coverage)

它不起作用,可能是因为我只看到SELECT上使用了IDENT_CURRENT。但是,我需要做一些类似的事情,在插入的第一行之后实体上生成 idEntity ,在患者表上行 idEntity ,必须是实体上生成的相同ID 。在Direction和PatientSecure上也是如此。

如果有更好的方法,请提出建议。

请帮忙!并且很好:) 谢谢

2 个答案:

答案 0 :(得分:0)

请注意IDENT_CURRENT返回一个独立于会话和范围的值。另一个用户可能会导致值INSERT语句之间发生变化。

您可以使用Scope_Identity()

declare @EntityId as Int;
INSERT INTO Entity VALUES (@nameEnt, @iniEnt, @LastNEnt1, @suffixEnt);
set @EntityId = Scope_Identity();
declare @PatientId as Int;
INSERT INTO Patient VALUES (@housing, @dob, @EntityId);
set @PatientId = Scope_Identity();
INSERT INTO Direction VALUES (@postAdd, @city, @state, @zip, @EntityId);
INSERT INTO PatientSecure VALUES (@PatientId, @idSecure, @contractNo, @groupNo, @coverage)

或者您可以在OUTPUT上使用INSERT子句来保存适当的值。虽然在这种情况下它可能有点过分,但它是一个有价值的工具。它适用于DELETEINSERTUPDATE语句,处理多行,并且(在适用的情况下)提供之前的之后的访问权限值。

答案 1 :(得分:0)

我会通过调用ident_current('some_table')替换您对scope_identity()的所有来电。