【问题标题】:How to insert an IDENT_CURRENT on INSERT query?如何在 INSERT 查询中插入 IDENT_CURRENT?
【发布时间】:2013-08-31 00:38:10
【问题描述】:

我正在 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 位于 Patient 表上行 idEntity 必须是 Entity 上生成的相同的 id。 Direction 和 PatientSecure 也是如此。

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

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

【问题讨论】:

  • 这些答案有帮助吗?他们好吗?如果是这样,一些反馈将是适当的。如果不是,反馈仍然是适当的。

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


【解决方案1】:

请注意,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)

或者您可以在INSERTs 上使用OUTPUT 子句来保存适当的值。虽然在这种情况下可能有点矫枉过正,但它是一个有价值的工具。它适用于 DELETEINSERTUPDATE 语句,处理多行,并且(如果适用)提供对 beforeafter 值的访问。

【讨论】:

    【解决方案2】:

    我会将您对ident_current('some_table') 的所有呼叫替换为对scope_identity() 的呼叫。

    【讨论】:

    • 由于Entity 的标识值被使用了两次,并且Patient 标识值在插入INSERT 之后使用,因此简单的替换不太可能提供正确的结果。
    • 你是对的;我读的太快了,并假设每个连续的插入都在使用它之前插入的标识值。
    猜你喜欢
    • 2013-08-18
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 2013-11-21
    • 1970-01-01
    相关资源
    最近更新 更多