Сбросить столбец Identity до нуля в SQL Server?

Как сбросить столбец Identity таблицы до нуля в SQL Server?

Редактировать:

Как мы можем сделать это с помощью LINQ to SQL?


person Mohammad Dayyan    schedule 19.12.2010    source источник


Ответы (6)


DBCC CHECKIDENT (MyTable, RESEED, NewValue)

Вы также можете сделать Truncate Table, но, конечно, это также удалит все строки из таблицы.

Для этого через L2S:

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

Или вы можете вызвать хранимую процедуру из L2S, чтобы сделать это

person Randy Minder    schedule 19.12.2010
comment
Как мы можем сделать это с помощью LINQ to SQL? - person Mohammad Dayyan; 19.12.2010
comment
Спасибо, чувак, но у меня проблема с выполнением вышеуказанной команды. Я выбрал имя для своей таблицы в формате UTF-8 (персидский), а затем вставил его вместо MyTable произошла следующая ошибка Cannot find a table or object with the name "[????? ?????? ???]". Check the system catalog. Как я могу ее решить? - person Mohammad Dayyan; 20.12.2010

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

Дополнительные сведения: http://msdn.microsoft.com/en-us/library/ms176057.aspx

person Andrew    schedule 19.12.2010
comment
Как мы можем сделать это с помощью LINQ to SQL? - person Mohammad Dayyan; 19.12.2010
comment
@Mohammad: выполните этот оператор SQL с помощью context.ExecuteCommand - person marc_s; 20.12.2010

Используйте команду LINQ to SQL ExecuteCommand для запуска требуемого SQL.

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

LINQ — это язык запросов, не зависящий от источника данных, и у него нет встроенных средств для такого рода функций, специфичных для источника данных. LINQ to SQL не предоставляет специальной функции для этого, насколько я знаю.

person Blake Taylor    schedule 19.12.2010

Общий метод расширения:

    /// <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);

person diachedelic    schedule 02.10.2012
comment
Нужен ли TIdentity? - person liang; 06.03.2014
comment
Ты спас мой день, чувак. Спасибо. :) - person Kemal Can ÖZÇELİK; 22.02.2017

используйте этот код

DBCC CHECKIDENT(‘tableName’, RESEED, 0)
person Nithesh Narayanan    schedule 20.12.2010
comment
Этот ответ не добавляет ничего, чего еще не было в предыдущих ответах, рассмотрите возможность удаления. - person Benjol; 20.12.2010

Чтобы выполнить ту же задачу в таблице SQL Compact, используйте:

db.CommandText = "ALTER TABLE MyTable ALTER COLUMN Id IDENTITY (1,1)";   
db.ExecuteNonQuery(  );
person Jeff Patterson    schedule 22.04.2014