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?
sql-server
auto-increment
delete-row
jumbojs
fuente
fuente
Respuestas:
Emita el siguiente comando para reiniciar mytable para comenzar en 1:
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.
fuente
DBCC CHECKIDENT (mytable, RESEED, 0)
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 menoresnumber
.Para obtener el valor máximo de una columna (nombre_columna) de una tabla (tabla1), puede usar la siguiente consulta
fuente
semi a prueba de idiotas:
http://sqlserverplanet.com/tsql/using-dbcc-checkident-to-reseed-a-table-after-delete
fuente
Si está utilizando MySQL, intente esto:
fuente
Eliminar y volver a colocar todas las tablas en una base de datos.
fuente
Me lo imaginé. Sus:
fuente
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 datosEs decir, lo siguiente arrojará un error:
Incluya el nombre de la tabla completa con comillas simples en su lugar:
fuente
Varias respuestas recomiendan usar una declaración como esta:
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
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:
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.
fuente
Quiero agregar esta respuesta porque el
DBCC CHECKIDENT
enfoque -producirá problemas cuando use esquemas para tablas. Use esto para estar seguro:Si desea verificar el éxito de la operación, use
que debería salir
0
en el ejemplo anterior.fuente
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.
fuente
¿Qué hay de esto?
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:
fuente