Autoincrement uniqueidentifier

Básicamente quiero usar uniqueidentifier de manera similar a como de identidad. No quiero insertar valores en ello, sólo tiene que insertar automáticamente los valores, un valor diferente para cada fila.
Yo no soy capaz de establecer autoincrement en las columnas de tipo uniqueidentifier(la propiedad «autoincrement» está establecido en false y no es editable).

InformationsquelleAutor Rasto | 2010-05-14

4 Kommentare

  1. 30

    O mejor aún: el uso de la newsequentialid() como el valor predeterminado para su UNIQUEIDENITIFER columna. Que voy a darle un poco de la serie secuencial de Guid.

    CREATE TABLE dbo.YourTable   
       (SerialID UNIQUEIDENTIFIER 
            CONSTRAINT DF_SerialID DEFAULT newsequentialid(),
         .... (other columns)......
       )

    Problema es: newsequentialid es sólo disponible como una columna por defecto – no se puede llamar como una función o nada. Pero que parece que se ajuste a sus requisitos.

    ACTUALIZACIÓN: no parece ser un reconocido error en SQL Server Management Studio que impide la especificación de newsequentialid() como valor por defecto para una columna en la tabla interactiva diseñador.

    Ver: http://social.msdn.microsoft.com/Forums/en-US/sqltools/thread/cad8a4d7-714f-44a2-adb0-569655ac66e6

    Solución: crear la tabla sin especificar ningún valor predeterminado y, a continuación, escriba en esta instrucción T-SQL normal de la ventana de consulta y ejecuta:

    ALTER TABLE dbo.YourTable
        ADD CONSTRAINT DF_SerialID DEFAULT newsequentialid() FOR SerialID

    Que debe hacer el truco!

    • Que no es problema en absoluto para mí. Su respuesta parece ser que lo que yo estaba buscando. Voy a probarlo 🙂
    • Conseguí «Error al validar el valor predeterminado para la Columna de XY». Podría usted por favor, el control de su código(un error tipográfico?) ?
    • Me encontré con que el código en SQL Server 2008 R2 antes de que lo publicado – funciona. ¿Qué versión de SQL Server que tiene??? He quitado extra entre paréntesis alrededor de la newsequentialid() – tal vez eso es un problema? Se trabaja en 2008R2 seguro
    • El que está pre-instalado en VS 2010 Ultimate edition. No estoy seguro de donde puedo encontrar la versión del servidor, pero voy a buscarlo.
    • parece ser un Servidor SQL server Management Studio error: social.msdn.microsoft.com/Forums/en-US/sqltools/thread/… – tipo en la declaración de código SQL y ejecutarlo!
    • Puedo tratar de ignorar el error… Se me pregunta si quiero guardar la configuración o en cancelar a causa de error. Pero supongo que no va a funcionar.
    • Finalmente me decido a usar la identidad, pero supongo que la solución sería trabajar.
    • Si el único campo de identidad es secuencial se agrupamiento y la paginación de ser un problema aún si el campo es una clave principal?
    • sí – es aún menos óptimo utilizando un INT IDENTITY (desde el GUID es de 16 vs 4-byte – 4x mayor), pero es menos preocupante que el totalmente al azar newid() GUID. Yo prefiero INT IDENTITY
    • Estoy de acuerdo en que es más grande, solo estoy preguntando porque se nos acabó el IDs con INT en el trabajo y se preguntaba por qué no usar simplemente GUID y no te preocupes por eso por 1000 años o así, lol, hay un estudio sobre la forma mucho más eficientes INT o BIGINT es comparado a un secuencial GUID?
    • es este newsequentialid() método predefinido en sql server? lo que es diferente si utilizamos int y el conjunto es autoincrement a la verdad?

  2. 6

    Supongo que te refieres en SQLServer y no en C#…

    Conjunto de la columna como CLAVE PRIMARIA y ROWGUID

    RowGuid http://img341.imageshack.us/img341/8867/sqlserverrowguid.png

    • sólo asegúrese de que NO utilice el índice agrupado en la mesa!!!!
    • ¿Por qué no? Lo estoy usando en un proyecto y funciona bien, todo se ve normal, revisó el plan de ejecución, tabla de pedido, todo es normal…
    • GUID como índice agrupado se horriblemente mal: echa un vistazo a sqlskills.com/BLOGS/KIMBERLY/post/… – conducen a la masiva página y el índice de fragmentación
    • es guardarlo como nvarchar(36) mejor para CI ?
    • Tiene los mismos problemas: demasiado ancho, y totalmente al azar – y, además, es ahora de longitud variable – que hace que sea aún peor!
    • Sólo quería aclarar si fue el concepto de usar una 16byte Guid que es malo, o simplemente el hecho de que fue definida como «UniqueIdentifier’
    • los dos principales problemas con el GUID se (1) es un gran clave (16 bytes vs por ejemplo, de 4 bytes para un INT), y (2) de forma predeterminada, GUID son totalmente al azar, que conduce a la enorme fragmentación de índices

  3. 3

    Uso NewID() como el valor predeterminado. Al menos esto es lo que puedes hacer para SQL Server.

    • esos no son exactamente en cualquier lugar cerca secuencial / automática de incremento, aunque…..
    • He intentado esto pero parece generar siempre el mismo identificador (este: «00000000-0000-0000-0000-000000000000»). Así que cuando la inserción de la segunda fila me sale el error (atar para insertar la clave principal que se utiliza)
    • usted debe establecer newId() directamente en la definición de la tabla dentro de la base de datos!
  4. 3

    Creo

    CREATE TABLE dbo.YourTable
    (
        SerialID UNIQUEIDENTIFIER PRIMARY KEY DEFAULT newsequentialid()
    )

    es más simple

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea