批处理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]);
}
}
}
来自SCOPE_IDENTITY
(强调矿)的文档:
返回插入中标识列的最后一个标识值相同的范围。作用域是一个模块:存储过程、触发器,函数,或批处理。因此,两个语句是相同的如果它们在同一存储过程、函数、或批处理。
在这种情况下,您的命令:
"insert into .... ; select SCOPE_IDENTITY();"
是一个批,因此,您将获得该批中最后插入的标识值,在本例中,它是插入中的标识值。因为它是批中唯一的其他语句。