WebMatrix中有一个GetLastInsertId方法。但是,使用Reflector,我可以看到它的实现方式如下:
[return: Dynamic]
public object GetLastInsertId()
{
return this.QueryValue("SELECT @@Identity", new object[0]);
}
据我所知,这是一种非常糟糕的方法,因为@@Identity
会考虑每个表和每个会话返回最后一个插入。我需要将此限制在我正在使用的范围和会话中,因此我希望使用SELECT SCOPE_IDENTITY()
,因为根据我的阅读,这似乎也是最常用的。
我的问题是:
我对SQL Server(非紧凑型)的答案感兴趣,如果这有所不同。
答案 0 :(得分:1)
引用David Fowler,WebMatrix中数据API的一个开发人员:“[SCOPE_IDENITTY]在ce上不起作用”。由于我们需要一个可以在CE和常规SQL Server上运行的数据API,因此我们使用了@@ Identity。因此,如果您想特别使用SCOPE_IDENTITY,则应使用db.QueryValue方法:
var db = Database.Open(...);
db.Insert(...);
var lastInsertId = db.QueryValue("SELECT SCOPE_IDENTITY()")
答案 1 :(得分:1)
我遇到了同样的问题,我读了这些答案,但仍无法使代码正常工作。我可能误读了上面的解决方案,但似乎对我有用的是:
var db=Database.Open(...);
var lastInsertID = db.QueryValue("INSERT name into Names; SELECT SCOPE_IDENTITY()");
答案 2 :(得分:1)
这是我的解决方案
var db.Database.open('..');
var lastId = db.GetLastInsertId();