Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 12359|Respuesta: 1

[Fuente] Columnas de crecimiento automático de SQL Server 2012 con problemas de salto de valor

[Copiar enlace]
Publicado en 23/8/2018 12:03:06 | | | |
Introducción

A partir de las versiones de SQL Server 2012, cuando se reinicia la instancia de SQL Server, el valor de la columna de crecimiento automático de la tabla salta y el valor específico del salto se determina por el tipo de dato de la columna de crecimiento. Si el tipo de dato es int, el valor de salto es 1000, y si el tipo de dato es bigint, el valor de salto es 10000. En nuestro proyecto, este tipo de problema de salto es inaceptable, especialmente cuando se muestra en el lado del cliente. Este extraño problema solo está presente en SQL Server 2012 y posteriores, y no existe en versiones anteriores a SQL Server 2012.


fondo

Hace unos días, un compañero de nuestro equipo de QA sugirió: El valor de la columna auto-incrementante de nuestra tabla se disparó inexplicablemente en 10.000. En otras palabras, el último valor de la columna autoincrementante en nuestra tabla fue 2200, pero ahora que hemos añadido un nuevo registro, el valor de la columna autoincrementada ha pasado a ser 12200. En nuestra lógica de negocio, situaciones como esta no están permitidas en el cliente, así que necesitamos resolver este problema.


Uso del código

Al principio todos éramos muy extraños, ¿cómo ha pasado esto? Normalmente no insertamos manualmente ningún valor en columnas auto-incrementantes (insertar manualmente valores en columnas auto-inflables está bien), y los valores de las columnas auto-inflables se mantienen en la propia base de datos. Un miembro de nuestro equipo principal empezó a investigar esta cuestión y encontró la respuesta. Ahora, me gustaría explicar este problema en detalle y la solución que encontró mi compañero.


Cómo reproducir este error


Tendrás que instalar SQL Server 2012 y luego crear una base de datos de prueba. Luego crea una tabla con columnas que crecen solas:
Ahora inserta dos datos:

Revisa los resultados:






En ese momento, el resultado fue el mismo que esperábamos. Ahora reinicia tu servicio SQL Server. Hay varias formas de reiniciar SQL Service, y aquí usamos SQL Server Manager para reiniciarlo:



Tras reiniciar, acabamos de insertar 2 datos más en la tabla:



Revisa los resultados:




Ahora ves los resultados tras reiniciar SQL Server 2012, y sus valores de columna auto-incrementados empiezan en 1002. Es decir, saltó 1000. Como se mencionó antes, si el tipo de dato que añadimos es bigint, su valor de salto será 10.000.


¿Es realmente un ERROR?

Microsoft afirma que esto es una característica, no un fallo, y es útil en muchos escenarios. Pero en nuestro caso, no necesitamos tal función, porque estos datos autoincrementales están pensados para mostrarse a los clientes, y los clientes se sentirán extrañados si ven esos datos que saltan. Y el valor del salto se determina por el número de veces que reinicias SQL Server. Si estos datos no se muestran a los clientes, pueden ser aceptables. Por lo tanto, esta característica suele ser adecuada solo para uso interno.



solución

Si no nos interesa esta "función" que ofrece Microsoft, hay dos formas de desactivarla.

1. Uso de secuencias

2. Registrar el parámetro de inicio -t272 para SQL Server



Uso de secuencias

Primero, necesitamos eliminar las columnas auto-incrementantes de la tabla. Luego se crea una secuencia sin caché, de la cual se insertan los valores numéricos. Aquí tienes el código de ejemplo:


Registrar el parámetro de inicio -t272

Abre SQL Server Configuration Manager. Selecciona tu instancia de SQL Server 2012, haz clic derecho y selecciona el menú de Propiedades. Busca los parámetros de lanzamiento en la ventana emergente y registra -t272. Tras completar, reinicia SQL Server (SQLSERVER2012) en la figura siguiente y luego realiza la operación de reproducción de errores para verificar si el problema se ha resuelto.




Notas adicionales:

Si tienes muchas tablas autoinflables en tu base de datos y todas tienen problemas de salto numérico, entonces es mejor usar la segunda opción. Porque es muy sencillo y el alcance es a nivel de servidor. Adoptar la segunda solución afectará a todas las bases de datos en esta instancia de servicio.





Anterior:El servidor web devuelve el tipo y significado del código de estado
Próximo:Actualizar el método de operación de la columna ID auto-creciente en la base de datos SQL Server
 Propietario| Publicado en 8/7/2020 15:15:52 |
SQL Server funciona en versiones superiores. Almacena en caché 1000 valores de identificación desde el principio por razones de rendimiento
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com