He eliminado algunos registros de una tabla en una base de datos de SQL Server. Ahora las ID van de 101 a 1200. Quiero eliminar los registros nuevamente, pero quiero que las ID vuelvan a 102. ¿Hay alguna manera de hacer esto en SQL Server?
He eliminado algunos registros de una tabla en una base de datos de SQL Server. Ahora las ID van de 101 a 1200. Quiero eliminar los registros nuevamente, pero quiero que las ID vuelvan a 102. ¿Hay alguna manera de hacer esto en SQL Server?
Respuestas:
Emita el siguiente comando para reiniciar mytable para comenzar en 1:
DBCC CHECKIDENT (mytable, RESEED, 0)
Lea sobre esto en los Libros en línea (BOL, ayuda de SQL). También tenga cuidado de no tener registros más altos que la semilla que está configurando.
DBCC CHECKIDENT (mytable, RESEED, 0)
DBCC CHECKIDENT('databasename.dbo.tablename', RESEED, number)
si número = 0, en la siguiente inserción el campo de incremento automático contendrá el valor 1
si número = 101, en la siguiente inserción el campo de incremento automático contendrá el valor 102
Alguna información adicional ... Puede ser útil para usted
Antes de dar el incremento automático number
en la consulta anterior, debe asegurarse de que la columna de incremento automático de la tabla existente contenga valores menores number
.
Para obtener el valor máximo de una columna (nombre_columna) de una tabla (tabla1), puede usar la siguiente consulta
SELECT MAX(column_name) FROM table1
semi a prueba de idiotas:
declare @max int;
select @max = max(key) from table;
dbcc checkident(table,reseed,@max)
http://sqlserverplanet.com/tsql/using-dbcc-checkident-to-reseed-a-table-after-delete
Si está utilizando MySQL, intente esto:
ALTER TABLE tablename AUTO_INCREMENT = 1
Eliminar y volver a colocar todas las tablas en una base de datos.
USE [DatabaseName]
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" -- Disable All the constraints
EXEC sp_MSForEachTable "DELETE FROM ?" -- Delete All the Table data
Exec sp_MSforeachtable 'DBCC CHECKIDENT(''?'', RESEED, 0)' -- Reseed All the table to 0
Exec sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all" -- Enable All the constraints back
-- You may ignore the errors that shows the table without Auto increment field.
Basado en la respuesta aceptada, para aquellos que encontraron un problema similar, con calificación de esquema completo:
( [MyDataBase].[MySchemaName].[MyTable]
) ... da como resultado un error, debe estar en el contexto de esa base de datos
Es decir, lo siguiente arrojará un error:
DBCC CHECKIDENT ([MyDataBase].[MySchemaName].[MyTable], RESEED, 0)
Incluya el nombre de la tabla completa con comillas simples en su lugar:
DBCC CHECKIDENT ('[MyDataBase].[MySchemaName].[MyTable]', RESEED, 0)
Varias respuestas recomiendan usar una declaración como esta:
DBCC CHECKIDENT (mytable, RESEED, 0)
Pero el OP dijo "eliminó algunos registros", que pueden no ser todos, por lo que un valor de 0 no siempre es el correcto. Otra respuesta sugirió encontrar automáticamente el valor actual máximo y volver a colocarlo en ese, pero eso tiene problemas si no hay registros en la tabla, y por lo tanto max () devolverá NULL. Un comentario sugerido usando simplemente
DBCC CHECKIDENT (mytable)
para restablecer el valor, pero otro comentario indicó correctamente que esto solo aumenta el valor al máximo que ya está en la tabla; esto no reducirá el valor si ya es más alto que el máximo en la tabla, que es lo que el OP quería hacer.
Una mejor solución combina estas ideas. El primer CHECKIDENT restablece el valor a 0, y el segundo lo restablece al valor más alto actualmente en la tabla, en caso de que haya registros en la tabla:
DBCC CHECKIDENT (mytable, RESEED, 0)
DBCC CHECKIDENT (mytable)
Como lo han indicado varios comentarios, asegúrese de que no haya claves externas en otras tablas que apunten a los registros eliminados. De lo contrario, esas claves foráneas apuntarán a los registros que cree después de volver a colocar la tabla, que seguramente no es lo que tenía en mente.
Quiero agregar esta respuesta porque el DBCC CHECKIDENT
enfoque -producirá problemas cuando use esquemas para tablas. Use esto para estar seguro:
DECLARE @Table AS NVARCHAR(500) = 'myschema.mytable';
DBCC CHECKIDENT (@Table, RESEED, 0);
Si desea verificar el éxito de la operación, use
SELECT IDENT_CURRENT(@Table);
que debería salir 0
en el ejemplo anterior.
No quieres hacer esto en general. Reseed puede crear problemas de integridad de datos. Realmente es solo para su uso en sistemas de desarrollo donde está borrando todos los datos de prueba y comenzando de nuevo. No debe usarse en un sistema de producción en caso de que no se hayan eliminado todos los registros relacionados (¡no todas las tablas que deberían estar en una relación de clave externa lo son!). Puede crear un desastre haciendo esto y especialmente si tiene la intención de hacerlo regularmente después de cada eliminación. Es una mala idea preocuparse por las brechas en sus valores de campo de identidad.
¿Qué hay de esto?
ALTER TABLE `table_name`
MODIFY `id` int(12) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=0;
Esta es una forma rápida y sencilla de cambiar el incremento automático a 0 o el número que desee. Lo descubrí exportando una base de datos y leyendo el código yo mismo.
También puede escribirlo así para que sea una solución de una sola línea:
ALTER TABLE `table_name` MODIFY `id` int(12) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=0;