我正在使用 2012为开发MVC5应用程序。我想使用Dapper点网获得最后插入的ID。我在这里找到了解决方案,但它们正在使用SQLServer2012 (Management ),但是当我在代码中运行查询时,返回值是错误的。下面是我已经尝试过获得最后一次插入ID的部分代码
SqlConnection _db = new SqlConnection("String");
string query_1 = @"DECLARE @InsertedRows AS TABLE (user_id int);Insert into users (stuff) OUTPUT Inserted.user_id INTO @InsertedRows values(@stuff); SELECT user_id FROM @InsertedRows";
string query_2 = @"Insert into users (stuff) OUTPUT Inserted.user_id values(@stuff);";
string query_3 = @"Insert into users (stuff) values(@stuff); SELECT SCOPE_IDENTITY()";
1. var id = _db.Query<int>(query_x, new { stuff = @stuff });
2. var id = _db.Execute(query_x, new { stuff = @stuff });但这两种情况下的ID值为1,而非实际结果。但是,当我在上运行相同的查询时,一切正常。请帮我解决这个问题。
发布于 2015-09-18 09:39:55
好的,我将回答我自己提出的问题,在对Dapper进行其他搜索之后,我得到了答案,我们有一个扩展方法.Single(),它将返回新增加的Selectd值的值,即
var id = _db.Query<int>(query_x, new { stuff = @stuff }).Single();在我的示例中,它将返回新添加的主键值的值。我只是添加了.Single()函数来获得新的增值。
发布于 2015-08-17 08:27:08
我认为问题在于您使用的是SCOPE_IDENTITY() ( https://msdn.microsoft.com/en-us/library/ms190315.aspx:返回插入到同一作用域中标识列中的最后一个标识值)。作用域是一个模块:存储过程、触发器、函数或批处理)
您可能需要IDENT_CURRENT()的结果( https://msdn.microsoft.com/en-us/library/ms175098.aspx:返回为指定表或视图生成的最后一个标识值)。最后生成的标识值可以是、任意会话和任何作用域)。
https://stackoverflow.com/questions/32029049
复制相似问题