0

我正在 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。但是,我需要做类似的事情,在插入第一行之后在Entity上生成的idEntity位于idEntity行上的Patient表上,该行必须与在Entity上生成的id 相同。Direction 和 PatientSecure 也是如此。

如果有更好的方法来做到这一点,请提出建议。

请帮忙!很好:) 谢谢

4

2 回答 2

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在 s 上使用一个子句INSERT来保存适当的值。虽然在这种情况下可能有点矫枉过正,但它是一个有价值的工具。它与DELETE,INSERTUPDATE语句一起使用,处理多行并且(如果适用)提供对之前之后值的访问。

于 2013-08-31T01:26:13.083 回答
0

我会将您的所有电话替换为对 的ident_current('some_table')电话scope_identity()

于 2013-08-31T01:26:59.960 回答