我有一个像下面这样的插入查询。但是,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();
}
}
答案 0 :(得分:0)
查看https://docs.microsoft.com/en-us/sql/t-sql/functions/scope-identity-transact-sql
描述说: 返回插入同一范围内的标识列的最后一个标识值。范围是一个模块:存储过程,触发器,函数或批处理。因此,如果两个语句在同一存储过程,函数或批处理中,则它们位于相同的范围内。
单词:它返回最后一个id而不是下一个id。因此,您无法像这样使用INSERT命令。你能做的是:
将您的ID配置为自动增量ID。然后运行INSERT命令并运行SELECT SCOPE_IDENTITY()以找出使用的ID。