Tag: scope identity

如果使用多个insert语句,有没有办法使用SCOPE_IDENTITY?

我将许多数据行从csv文件导入SQL Server数据库(通过Web应用程序)。 我需要为客户端返回自动生成的id值。 如果我在循环中执行此操作,性能非常差(但我可以使用SCOPE_IDENTITY()而没有任何问题)。 一个更高效的解决方案是这样的方式: INSERT INTO [MyTable] VALUES (‘1’), (‘2’), (‘3’) SELECT SCOPE_IDENTITY() 有没有办法获得所有生成的ID而不仅仅是最后生成的ID? 谢谢你的帮助! 最好的问候,托尔斯滕

批处理的sqlclient命令中的Scope_identity()

我通常在插入记录时使用存储过程以确保获得正确的scope_identity()值。 我现在需要在使用SqlClient时获取插入记录的id字段。 我的理解是,如果我使用insert批处理scope_identity()命令,那么它仍然与insert命令在同一范围内? 像下面的东西。 虽然很难validation……我会100%获得正确的id值吗? (id字段是自动递增bigint – Sql Server) long newid = 0; using (SqlConnection conn = new SqlConnection(….)) { conn.Open(); using (SqlCommand comm = new SqlCommand (“insert into …. ; select SCOPE_IDENTITY();”, conn)) { SqlDataReader reader = comm.ExecuteReader(); if (reader.HasRows) { reader.Read(); newid = Convert.ToInt64(reader[0]); } } }

entity framework和SCOPE_IDENTITY

我有一个插入表中的存储过程然后执行此行 SET @returnVal = SCOPE_IDENTITY(); 之后我尝试了两个: SELECT @returnVal 和 return @returnVal 当我从Microsoft SQL Server Management Studio执行存储过程时,我使用SELECT @returnVal获得预期结果 – SELECT @returnVal插入数据的标识列。 但是,当我将存储过程添加到我的ADO.Net实体数据模型/ EntityFramework类/ .edmx类并在我的C#代码中执行存储过程时,我得到的值-1返回但是没有失败。 是否有可能获得我想要的值,新的身份值,返回? 我意识到我可以手动将存储过程绑定到我的模型中表的插入操作 – 但这不是一个选项。 每次重新生成模型类时,都需要执行此手动工作的插入过程太多。

SQLCommand方法ExecuteScalar()返回什么数据类型?

在SQL Server中,ID是非空整数和标识。 当我运行以下代码时,我在最后一行得到一个InvalidCastException: SqlCommand cmd = new SqlCommand(); cmd.Connection = _conn; cmd.CommandText = @”INSERT INTO [Users] (Name, Email, Password) VALUES (@name, @email, @pass); SELECT SCOPE_IDENTITY()”; cmd.Parameters.AddWithValue(“@name”, newUser.Name); cmd.Parameters.AddWithValue(“@email”, newUser.Email); cmd.Parameters.AddWithValue(“@pass”, newUser.PasswordHash); int id = (int)cmd.ExecuteScalar(); 什么是ExecuteScalar()在这里返回? 无论它返回什么,都有一个ToString()使它看起来像一个数字,所以这个可怕的代码行工作: int id = Int32.Parse(cmd.ExecuteScalar().ToString());

T-SQL:将新的INSERT标识返回给C#

我正在使用存储过程将值放入SQL Server。 过程将向添加的行添加ID。 我需要将此ID返回到我的代码中。 目前我可以在Visual Studio的OUTPUT窗口中看到输出ID,但似乎无法在我的代码中捕获它。 以下是proc的摘要版本: SQL : CREATE PROCEDURE dbo.DoSomething ( @var1 INT = NULL, @var2 INT = NULL, @var3 DATE = NULL ) AS BEGIN INSERT INTO atable ( vara, varb, varc ) VALUES ( @var1, @var2, @var3 ) RETURN SCOPE_IDENTITY() END C#: int result = 0; /// create command SqlCommand cmd […]