繁体   English   中英

SCOPE_IDENTITY()返回千位数字

[英]SCOPE_IDENTITY() returns thousand number

我有一个类似下面的插入查询。 但是, scopeIdentity不返回42,而是返回1042。

这是SQL Server表:

在此处输入图片说明

我的代码:

int masterId = 0;

using (SqlConnection cmd = new SqlConnection(connString))
{
    using (SqlCommand conn = cmd.CreateCommand())
    {
        conn.CommandText = "INSERT INTO[MasterReportData]([ReportName],[CaseList],[EmployeeId],[datetime]) VALUES(@reportName, @caseList, @employeeId, @datetime) SET @ID = SCOPE_IDENTITY()";

        conn.Parameters.Add("@reportName", SqlDbType.VarChar).Value = reportName;
        conn.Parameters.Add("@caseList", SqlDbType.VarChar).Value = caseList;
        conn.Parameters.Add("@employeeId", SqlDbType.Char).Value = employeeId;
        conn.Parameters.Add("@datetime", SqlDbType.DateTime).Value = datetime;
        conn.Parameters.Add("@ID", SqlDbType.Int).Direction = ParameterDirection.Output;

        cmd.Open();
        conn.ExecuteNonQuery();

        masterId = Convert.ToInt32(conn.Parameters["@ID"].Value);
        cmd.Close();
    }
}

看看https://docs.microsoft.com/zh-cn/sql/t-sql/functions/scope-identity-transact-sql

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

换句话说:它返回最后一个ID,而不是下一个要使用的ID。 因此,您不能像这样使用INSERT命令。 您可以做的是:

将您的ID配置为自动递增ID。 然后运行INSERT命令,然后运行SELECT SCOPE_IDENTITY()找出使用了哪个ID。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM