¿Por qué el servidor Sql no permite más de una columna IDENTIDAD en una tabla? Alguna razón especificacolumna de identidad en el servidor Sql
Respuesta
una identidad es una columna (también conocido como campo) en una tabla de la base de que: -
- identifica de forma única cada fila de la tabla
- se compone de valores generados por la base de datos
Esto es muy parecido a un campo Autonumérico en Microsoft Access o una secuencia en Oracle.
Una columna de identidad difiere de una clave principal en que el servidor gestiona sus valores y (excepto en casos excepcionales) no se puede modificar. En muchos casos, se utiliza una columna de identidad como clave principal, sin embargo, este no es siempre el caso.
El servidor SQL usa la columna de identidad como el valor clave para referirse a una fila en particular. Por lo tanto, solo se puede crear una sola columna de identidad. Además, si no se indican explícitamente columnas de identidad, el servidor Sql almacena internamente una columna separada que contiene el valor clave para cada fila. Como se indicó, si desea que más de una columna tenga un valor único, puede utilizar la palabra clave UNIQUE.
"Una columna Identity ... Identifica de manera única cada fila en la tabla" - ¿En serio? ¿Por qué entonces es esto posible ?: CREATE TABLE Test1 (col1 INTEGER IDENTITY); SET IDENTITY_INSERT Test1 ON; INSERT INTO Test1 (col1) VALUES (1); INSERT INTO Test1 (col1) VALUES (1); SET IDENTITY_INSERT Test1 OFF; SELECCIONE col1 FROM Test1 – onedaywhen
... entonces si SQL Server permite que la columna IDENTITY contenga duplicados, ¿cómo podría ser cierto que "SQL Server usa la columna de identidad como valor clave para referirse a una fila en particular"? – onedaywhen
Onedaywhen, tus comentarios no tienen sentido. SQL Server no permite que una columna de identidad contenga duplicados. – Lisa
El propósito de una columna de identidad es que contendrá un valor único para cada fila de la tabla. Entonces, ¿por qué necesitarías más de uno de ellos en una mesa determinada?
Quizás necesite aclarar su pregunta, si tiene una necesidad real de más de una.
¿De verdad? ¿Por qué entonces es esto posible ?: CREATE TABLE Test1 (col1 INTEGER IDENTITY) ; SET IDENTITY_INSERT Test1 ON ; INSERT INTO Test1 (col1) VALUES (1) ; INSERT INTO Test1 (col1) VALUES (1) ; SET IDENTITY_INSERT Test1 OFF ; SELECCIONE col1 FROM Test1 ; – onedaywhen
¿Por qué lo necesitarías? SQL Server realiza un seguimiento de un valor único (valor de identidad actual) para cada tabla con IDENTITY
columna por lo que puede tener una sola columna de identidad por tabla.
Una columna de identidad se utiliza para identificar de forma única una sola fila de una tabla. Si desea que otras columnas sean exclusivas, puede crear un índice ÚNICO para cada columna de "identidad" que pueda necesitar.
¿De verdad? ¿Por qué entonces es esto posible ?: CREATE TABLE Test1 (col1 INTEGER IDENTITY); SET IDENTITY_INSERT Test1 ON; INSERT INTO Test1 (col1) VALUES (1); INSERT INTO Test1 (col1) VALUES (1); SET IDENTITY_INSERT Test1 OFF; SELECCIONE col1 FROM Test1 – onedaywhen
El servidor SQL almacena la identidad en una tabla interna, utilizando el ID de la tabla como su clave. Por lo tanto, es imposible que SQL Server tenga más de una columna de identidad por tabla.
Siempre he visto esto como una limitación arbitraria y mala para SQL Server. Sí, solo quiere una columna de identidad para identificar realmente una fila, pero hay razones válidas por las que desea que la base de datos genere automáticamente un número para más de un campo en la base de datos.
Eso es lo bueno de las secuencias en Oracle. No están atados a una mesa. Puede usar varias secuencias diferentes para rellenar tantos campos como desee en la misma tabla. Usted podría también tienen más de una mesa compartiendo la misma secuencia, aunque esa es probablemente una decisión realmente mala. Pero el punto es que podrías. Es más granular y te da más flexibilidad.
Lo malo de las secuencias es que tienes que escribir código para incrementarlas realmente, ya sea en tu instrucción de inserción o en un activador de inserción sobre la mesa. Lo bueno de la identidad de SQL Server es que todo lo que tiene que hacer es cambiar una propiedad o agregar una palabra clave a la creación de su tabla y listo.
Uhh, estas son dos cosas totalmente diferentes. On es el concepto de identidad, que PUEDE ser administrado por una secuencia generada. Y el otro es una secuencia generada. Quejarse de uno no merece malos sentimientos hacia el otro. –
99.El 9% de las veces, una columna de SQL Server IDENTITY y una secuencia de Oracle se usan con el mismo propósito: como una clave generada de base de datos para proporcionar unicidad a una fila. Sin embargo, puede usar una secuencia de Oracle de otras formas que no puede usar una columna de IDENTIDAD. Estaba señalando que otros proveedores de bases de datos reconocen la necesidad de tener la capacidad de generar automáticamente valores para más de un campo en una tabla, y SQL Server no. El autor de la pregunta parecía perplejo y perturbado por esto, y estaba de acuerdo con ese sentimiento. –
-1 Esto no intenta responder la pregunta. –
Porque MS se dio cuenta de que más del 80% de los usuarios solo querían una columna de autoincremento por mesa y la solución alternativa para tener una segunda (o más) es lo suficientemente simple, es decir, crear una IDENTIDAD con semilla = 1, incrementar = 1 luego una columna calculada que multiplica el valor generado automáticamente por un factor para cambiar el incremento y agregar un desplazamiento para cambiar la semilla.
Sí, las secuencias permiten más de una identidad como columnas en una tabla, pero aquí hay algunos problemas. En un escenario de desarrollo típico, he visto a los desarrolladores insertar manualmente valores válidos en una columna (que se supone que debe insertarse a través de la secuencia). Más adelante, cuando una secuencia intente insertar valor en la tabla, puede fallar debido a una violación de clave única.
Además, en un escenario de desarrollador múltiple/proveedor múltiple, los desarrolladores pueden usar la misma secuencia para más de una tabla (ya que las secuencias no están vinculadas a tablas). Esto podría llevar a valores perdidos en una de las tablas. es decir, la tabla A podría obtener el valor 1, mientras que la tabla B podría usar el valor 2 y la tabla A obtendría 3. Esto significa que la tabla A tendrá 1 y 3 (faltan 2).
Aparte de esto, hay otro escenario en el que tiene una tabla que se trunca todos los días. Dado que las secuencias no tienen ningún vínculo con la tabla, la tabla truncada continuará usando Seq.NextVal nuevamente (a menos que reinicie manualmente la secuencia) lo que generará valores faltantes o incluso un error de desbordamiento arthmético más peligroso después de algún tiempo.
Debido a la razón anterior, creo que tanto las secuencias de Oracle como la columna de identidad del servidor SQL son buenas para sus propósitos. Preferiría que Oracle implementara el concepto de Columna de identidad y SQL Server implementando el concepto de secuencia para que los desarrolladores puedan implementar cualquiera de los dos según sus requisitos.
Esta pregunta se realizó sobre columnas de identidad, no sobre objetos de secuencia (que ahora están disponibles a partir de SQL Server 2012). –
- 1. Servidor SQL cómo quitar la identidad de una columna
- 2. Servidor SQL: ¿cómo agregar una nueva columna de identidad y llenar una columna con identificadores?
- 3. SQL tema de la identidad del servidor
- 4. Columna DateCreated en el servidor Sql?
- 5. columna para remar en el servidor sql?
- 6. get @@ Identidad de otro servidor (servidor vinculado)
- 7. SQL Server - restablecer el campo de identidad
- 8. Cómo agregar identidad a la columna en SQL Server?
- 9. La inserción de identidad en el servidor vinculado falla
- 10. uso del servidor SQL columna
- 11. Agregar columna al servidor SQL
- 12. Actualizar la columna de autoincremento en el servidor SQL
- 13. Seleccionar servidor SQL * Ordenar nombre de columna
- 14. servidor SQL computarizada sintaxis columna de fórmula
- 15. Los valores de la columna de identidad del servidor SQL comienzan en 0 en lugar de 1
- 16. Actualizar valores en la columna de identidad
- 17. columna de identidad en EF 4
- 18. Servidor SQL: Comprobando el tipo de datos de una columna
- 19. Servidor de identidad WSO2 api
- 20. ¿Cómo controlar el orden de asignación para la nueva columna de identidad en SQL Server?
- 21. sql inserte los nulos en el servidor en la columna de tiempo
- 22. Agregar una identidad a una columna existente
- 23. Servidor SQL Modificar la columna calculada
- 24. Obtener la identidad de la inserción múltiple en el servidor sql 2008
- 25. Eliminar identidad de una columna en una tabla
- 26. ¿Puede una tabla de servidor sql tener dos columnas de identidad?
- 27. inserción de identidad tsql sin lista de nombres de columna
- 28. Insertar inserción de SQL @@ Identidad
- 29. Identidad SQL con ceros principales acolchados
- 30. Cambiar la semilla de identidad en SQL Server (¡permanentemente!)
La respuesta aceptada es incorrecta sobre el motivo. Incluso si te permitiera crear dos columnas de identidad, de todos modos no serviría de nada [como aquí] (http://stackoverflow.com/a/3807400/73226) –