私は以下のような挿入クエリを持っています。しかし、scopeIdentity
は42を返しません、それは1042SCOPE_IDENTITY()は1000の数値を返します
これは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();
}
}
セミコロンがありません。 ?なぜそれが42を返すべきだと思いますか?最後の行が '41'であっても、ロールバックされた挿入または削除によってカウンタが前進する可能性があります –
したがって、データベースを見ると、実際にどの値が挿入されましたか?アイデンティティ列の1000のジャンプはかなり一般的です(2012年以降、IIRC)、とにかく*実際の数値*を気にしていれば、あなたはIDを間違って使用していると思います。 –
このテーブルのID列の現在の値を確認してください: 'SELECT IDENT_CURRENT( 'MasterReportData')' - それは何を返しますか? –