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服务器资源管理器)?

SQL Server中的Identity列暴露了奇怪的行为

为什么是负的我不知道。但是,当您重新加载应用程序时,这些记录已经存在于数据库中,并且具有在提交给数据库时分配的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