小编典典

批处理sqlclient命令中的Scope_identity()

sql

我通常在插入记录时使用存储过程,以确保获得正确的scope_identity()值。我现在需要使用SqlClient时获取插入记录的id字段。

我的理解是,如果我使用插入命令对scope_identity()命令进行批处理,那么它将仍然与insert命令处于同一范围内?像下面这样。虽然很难验证…我会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]);
        }
    }
}

阅读 215

收藏
2021-04-14

共1个答案

小编典典

SCOPE_IDENTITY(重点为我的)文档中

返回插入到同一作用域的标识列中的最后一个标识值。范围是一个模块:存储过程,触发器,函数 或批处理 。因此,如果两个语句位于相同的存储过程,函数
或batch中 ,则它们在同一范围内。

在这种情况下,您的命令:

"insert into .... ; select SCOPE_IDENTITY();"

是批处理,因此,您将获得该批处理中最后插入的标识值,在这种情况下,它是插入项中的标识值,因为它是批处理中唯一的其他语句。

2021-04-14