批处理sqlclient命令中的Scope_identity()

本文关键字:identity Scope sqlclient 命令 批处理 | 更新日期: 2023-09-27 18:27:28

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

我的理解是,如果我将scope_identity()命令与insert一起批处理,那么它仍然与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]);
        }
    }
}

批处理sqlclient命令中的Scope_identity()

来自SCOPE_IDENTITY(强调矿)的文档:

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

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

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

是一个批,因此,您将获得该批中最后插入的标识值,在本例中,它是插入中的标识值。因为它是批中唯一的其他语句。