我正在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上也是如此。
如果有更好的方法,请提出建议。
请帮忙!并且很好:) 谢谢
答案 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
子句来保存适当的值。虽然在这种情况下它可能有点过分,但它是一个有价值的工具。它适用于DELETE
,INSERT
和UPDATE
语句,处理多行,并且(在适用的情况下)提供之前的和之后的访问权限值。
答案 1 :(得分:0)
我会通过调用ident_current('some_table')
替换您对scope_identity()
的所有来电。