Tengo una tabla con la enorme cantidad de datos. Me gustaría añadir columna id y usarlo como clave principal. ¿Cuál es la mejor manera de llenar esta columna con los valores de una 1 a row count

Actualmente estoy usando el cursor y actualización de las filas de uno en uno. Toma horas. Es allí una manera de hacerlo más rápido?

Gracias

InformationsquelleAutor Sergejs | 2012-02-23

2 Comentarios

  1. 120

    Hacerlo así:

    ALTER TABLE dbo.YourTable
    ADD ID INT IDENTITY(1,1)

    y la columna se crea y se rellena automáticamente con el integer valores (como Aaron Bertrand señala en su comentario – usted no tiene ningún control sobre la fila que pone lo de valor SQL Server controla que por su propia cuenta y no puede influir en él. Pero todas las filas que va a obtener un válido int valor – no habrá ninguna NULL o valores duplicados).

    Siguiente, establecerlo como clave principal:

    ALTER TABLE dbo.YourTable
    ADD CONSTRAINT PK_YourTable PRIMARY KEY(ID)
    • +1, pero espero que el OP nombres es algo más descriptivo, a continuación, ID como WidgetID, etc.
    • slim esperanza de que él menciona en su pregunta a la que quiere agregar id 🙂
    • Yo prefiero id. WidgetID suena como una clave externa. Así que espero que no
    • Eso es para el debate. Si una tabla Person tiene un PK llamado ID o llama PersonID. No hay una respuesta, es la preferencia, el medio ambiente estándar, pero ciertamente no es universalmente aceptada.
    • Así, «valores propios» es un poco subjetivo, puesto que usted realmente no tiene ningún control sobre la fila que pone que el valor de identidad – dependerá subyacente índices. 🙂
    • así, la adecuada en términos de hay va a ser int valores de allí – no todos Nulos o algo 🙂 Pero tienes razón – estos int se repartieron sin su control. Pero he actualizado mi respuesta para incluir la retroalimentación de los suyos – ¡gracias!
    • mi opinión personal es que debería ser PersonID no importa dónde en el esquema que se hace referencia. Pero esa es una discusión de una cuestión diferente, y probablemente no en este sitio. 🙂
    • Algo de nota, OP mención a la «enorme cantidad de datos», que es subjetivo. Sin embargo, se requieren horas para actualizar el uso de un cursor? Él puede querer semilla con identity (-2147483648, 1)
    • Para que todos sabemos que tiene un WAITFOR DELAY '00:30:00'; en cada iteración del cursor. O haciendo otras tonto o la ineficacia de las cosas. Enorme es ciertamente subjetivo y no hay que subestimar la capacidad de las personas para hacer normalmente operaciones rápidas muy lento, o a exagerar. 🙂
    • en mi opinión columnas debe tener un nombre descriptivo, y el ID no es descriptivo, iba a llamar a una columna int o FK?. en mi opinión columnas que se unen (FKs) debe ser del mismo nombre y tipo de datos. Como resultado, un buen PK sería PersonID y la coincidencia de FK columna todavía sería PersonID. Entiendo que otras personas tienen otras opiniones, yo estoy contento de la gente con la que trabajo comparten esta filosofía conmigo.
    • Técnicamente, creo que puede hacer que las identidades se aplican en un orden determinista si se define un índice agrupado con las columnas/tipo que queramos, pero ¡cuidado!! — esto hará que el ‘gran’ tabla para obtener re-organizado en el disco.
    • Espero que no te prefijo de cada columna con el nombre de la tabla.. Si PersonID, entonces ¿por qué no también PersonFirstName, PersonLastName.. ?
    • la idea es que el uso de «ID» las columnas de varias tablas como una clave externa. Como resultado de ello, es bueno tener el mismo nombre de columna (PersonID) en ambas tablas. En sistemas grandes, con muchas mesas y un montón de código tsql, puede ser muy doloroso, donde las claves externas tienen nombres diferentes.
    • Puedo ver esa perspectiva.
    • El prefijo con el nombre o alias de tabla es mucho más limpio enfoque en mi humilde opinión.
    • No me gustan las letras pequeñas me gustaría ir con WidgetId

  2. 2

    Si quieres añadir fila de números en un orden específico que usted puede hacer ROW_NUMBER() en una nueva tabla, a continuación, colocar el original. Sin embargo, dependiendo del tamaño de la tabla de negocios y otras restricciones, puede que usted no quiere hacer eso. Esto también implica que hay una lógica según la cual usted desea que la tabla ordenada.

    SELECT ROW_NUMBER() OVER (ORDER BY COL1, COL2, COL3, ETC.) AS ID, *
    INTO NEW_TABLE
    FROM ORIGINAL_TABLE

Dejar respuesta

Please enter your comment!
Please enter your name here