我正在使用ADO.NET尝试获取我即将插入的值我将其插入SQL Server 2005. SCOPE_IDENTITY()之后工作正常,但我也是在交易中如果有所作为。我确实需要选择下一个ID,只需要ID,并在插入之前将其提供给C#。
答案 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所说,“它返回在任何会话和任何范围内为特定表生成的最后一个标识值”