在SQL Server中将Identity列重置为零?

时间:2010-12-19 19:31:32

标签: c# sql-server linq-to-sql identity-column

如何在SQL Server中将表的Identity列重置为零?

编辑:

我们如何使用LINQ to SQL做到这一点?

6 个答案:

答案 0 :(得分:24)

DBCC CHECKIDENT (MyTable, RESEED, NewValue)

您也可以执行截断表,但是,当然也会删除表中的所有行。

通过L2S做到这一点:

db.ExecuteCommand("DBCC CHECKIDENT('MyTable', RESEED, NewValue);");

或者,您可以从L2S调用存储过程来执行此操作

答案 1 :(得分:9)

DBCC CHECKIDENT ( ‘databasename.dbo.yourtable’,RESEED, 0)

更多信息:http://msdn.microsoft.com/en-us/library/ms176057.aspx

答案 2 :(得分:6)

使用LINQ to SQL ExecuteCommand运行所需的SQL。

db.ExecuteCommand("DBCC CHECKIDENT('table', RESEED, 0);");

LINQ是一种与数据源无关的查询语言,没有针对此类数据源特定功能的内置工具。 LINQ to SQL没有提供执行此操作的特定功能AFAIK。

答案 3 :(得分:3)

通用扩展方法:

    /// <summary>
    /// Reseeds a table's identity auto increment to a specified value
    /// </summary>
    /// <typeparam name="TEntity">The row type</typeparam>
    /// <typeparam name="TIdentity">The type of the identity column</typeparam>
    /// <param name="table">The table to reseed</param>
    /// <param name="seed">The new seed value</param>
    public static void ReseedIdentity<TEntity, TIdentity>(this Table<TEntity> table, TIdentity seed)
        where TEntity : class
    {
        var rowType = table.GetType().GetGenericArguments()[0];

        var sqlCommand = string.Format(
            "dbcc checkident ('{0}', reseed, {1})",
            table.Context.Mapping.GetTable(rowType).TableName, 
            seed);

        table.Context.ExecuteCommand(sqlCommand);
    }

用法:myContext.myTable.ReseedIdentity(0);

答案 4 :(得分:2)

使用此代码

DBCC CHECKIDENT(‘tableName’, RESEED, 0)

答案 5 :(得分:0)

要在SQL Compact表中完成相同的任务,请使用:

db.CommandText = "ALTER TABLE MyTable ALTER COLUMN Id IDENTITY (1,1)";   
db.ExecuteNonQuery(  );