Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用简洁的点网获取最后插入的id_Sql Server_Asp.net Mvc_Visual Studio 2012_Asp.net Mvc 5 - Fatal编程技术网

Sql server 使用简洁的点网获取最后插入的id

Sql server 使用简洁的点网获取最后插入的id,sql-server,asp.net-mvc,visual-studio-2012,asp.net-mvc-5,Sql Server,Asp.net Mvc,Visual Studio 2012,Asp.net Mvc 5,我正在使用Microsoft Visual Studio Express 2012 for Web来开发MVC5应用程序。我想使用Dapper dot net获取最后一个插入的ID。我在这里找到了解决方案,但它们正在SQL Server 2012(Management Studio)上工作,但当我在代码中运行查询时,返回的值是错误的。下面是我已经尝试获取最后一个插入ID的代码片段 SqlConnection _db = new SqlConnection("String");

我正在使用Microsoft Visual Studio Express 2012 for Web来开发MVC5应用程序。我想使用Dapper dot net获取最后一个插入的ID。我在这里找到了解决方案,但它们正在SQL Server 2012(Management Studio)上工作,但当我在代码中运行查询时,返回的值是错误的。下面是我已经尝试获取最后一个插入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 });
SqlConnection\u db=newsqlconnection(“字符串”);
字符串查询_1=@“将@InsertedRows声明为表(user_id int);插入到用户(stuff)输出Inserted.user_id到@InsertedRows值(@stuff);从@InsertedRows中选择user_id”;
字符串查询_2=@“插入到用户(stuff)输出插入。用户_id值(@stuff);”;
字符串查询_3=@“插入用户(stuff)值(@stuff);选择范围_标识()”;
1.var id=_db.Query(Query_x,new{stuff=@stuff});
2.var id=_db.Execute(query_x,new{stuff=@stuff});

但在这两种情况下ID的值都是1,但不是实际结果。但是,当我在SQL management Studio上运行相同的查询时,一切都正常了。请帮助解决此问题

我认为问题在于您使用的是SCOPE\u IDENTITY() (文件地址: 返回插入到同一作用域中的标识列中的最后一个标识值。作用域是一个模块:存储过程、触发器、函数或批处理)

您可能希望从IDENT_CURRENT()获得结果 (文件地址:
返回为指定表或视图生成的最后一个标识值。生成的最后一个标识值可以是任何会话和任何作用域

好的,我将回答我自己提出的问题,在Dapper中进行其他搜索后得到答案我们有一个扩展方法
。Single()
将返回新添加的选定值的值,即

var id = _db.Query<int>(query_x, new { stuff = @stuff }).Single();
var id=_db.Query(Query_x,new{stuff=@stuff}).Single();
在我的例子中,它将返回新添加的主键值。我只是添加了
.Single()
函数来获得新的附加值。

输出插入
供参考,这可能比使用范围标识慢,并且在SQL Server 2008 R2 Service Pack 1的更新5中得到了修复