在.NET中的事务处理之前插入之前获取新ID

时间:2010-10-02 13:32:28

标签: c# .net sql-server sql-server-2005 tsql

我正在使用ADO.NET尝试获取我即将插入的值我将其插入SQL Server 2005. SCOPE_IDENTITY()之后工作正常,但我也是在交易中如果有所作为。我确实需要选择下一个ID,只需要ID,并在插入之前将其提供给C#。

4 个答案:

答案 0 :(得分:3)

作为替代解决方案,您可以将主键类型更改为GUID类型,这样您就可以使用已知密钥进行插入。

Guid pk = Guid.NewGuid();

我不记得SQL服务器的方法,如果直接支持该类,或者您需要将其转换为byte []。对于oracle,我们转换为char(32)。

这样您就不必担心并发性了。

答案 1 :(得分:2)

无论您选择哪种解决方案,请务必在高并发性下进行测试。最有可能它会中断 - 两个或多个不同的连接在插入之前会获得相同的ID。在做任何事情之前,我会使用sp_getapplock来序列化访问,这样就没有并发性了。

答案 2 :(得分:1)

SCOPE_IDENTITY仅在您将行插入表格后才能使用。如果在插入之前需要知道该值,则需要使用IDENT_CURRENT('table_name')。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms175098.aspx

答案 3 :(得分:-3)

尝试使用IDENT_CURRENT。 正如MSDN所说,“它返回在任何会话和任何范围内为特定表生成的最后一个标识值”

相关问题