SQL Server中的Identity列暴露了奇怪的行为
本文关键字:暴露 Server 中的 Identity SQL | 更新日期: 2023-09-27 18:03:41
我在SQL Server数据库的数据表中有一个identity
(自动增量整数)列。
当我启动程序并向该表添加新记录时,标识列总是等于-1。对于下一条记录,它变成-2,以此类推。我这样添加新记录:
http://msdn.microsoft.com/en-us/library/5ycd1034.aspx然而,当我重新启动程序时,所有标识值都被重新排序(变成1,2,…)。
知道为什么会这样吗?如果我可以在不重新启动的情况下删除这些记录,那将没有问题。我用的是SQL Server 2008。
也有任何方法来指定MAX
大小列数据类型通过GUI界面(当添加表在visual studio 2012服务器资源管理器)?
为什么是负的我不知道。但是,当您重新加载应用程序时,这些记录已经存在于数据库中,并且具有在提交给数据库时分配的id;这就是为什么它们在重启时具有真正的值。
但是,您不需要从DataTable
中删除记录,您只需要在将其提交到数据库后刷新该行。有许多方法可以做到这一点,并且在很大程度上取决于您现在如何访问数据,但是您可以做一些事情,例如使用INSERT
命令附加SELECT SCOPE_IDENTITY()
命令,然后使用ExecuteScalar
提交行,如下所示:
var insertCmd = "INSERT INTO tbl (fld1, fld2) VALUES (@fld1, @fld2); SELECT SCOPE_IDENTITY()";
using (var c = new SqlConnection(connString))
using (var cmd = new SqlCommand(insertCmd, c))
{
cmd.AddParameterWithValue("@fld1", fld1Value);
cmd.AddParameterWithValue("@fld2", fld2Value);
var result = cmd.ExecuteScalar();
int id;
if (int.TryParse(result, out id))
{
// update the DataTable row here
dataTable.Rows[index]["id_column"] = id;
dataTable.AcceptChanges();
}
}
您甚至可以选择在执行更新后重新加载整个DataTable
。