none
Como puedo hacer este bucle RRS feed

  • Pregunta

  • buenas soy nuevo en sqlserver, y me ha tocado actualizar unas tablas que no poseian claves primarias, para no destruir la base dato primero creo el campo id = (int) con campos nulos y luego manualmente los voy llentando de 1 en 1 hasta finalizar vuelvo al diseño y lo cambio a primary key, mi problema es que son cientos de tablas y con registros de 200 y hasta 800 filas y es muy canzon estube leyendo que se puede hacer un while cosa que intente pero el wile me rellena todos los campos con el numero final y no de 1 en 1 como deberia de tenerla las clave primaria espero su ayuda de ante manos y muchas gracias si me ayudan
    lunes, 10 de agosto de 2015 3:39

Respuestas

Todas las respuestas

  • Hola,

    Podrías tratar así:

    DECLARE @IdAct INT;
    SET @IdAct = 0 
    UPDATE 
    	TuTabla
    SET 
    	@IdAct = Id = @IdAct + 1 
    GO 

    Saludos!


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Herbert Mendoza

    • Propuesto como respuesta Karen MalagónModerator lunes, 10 de agosto de 2015 22:23
    • Marcado como respuesta ajbg martes, 11 de agosto de 2015 6:53
    lunes, 10 de agosto de 2015 4:03
  • Hola ajbg,

    ¿Tablas sin clave primaria? Algún campo debe tener el rol de indicador único (aunque no se haya definido la restricción Primary Key), porque entonces ¿cómo están relacionadas las tablas? ¿Qué campo único referencia a la tabla base?. Mencionas que tienes mas de 200 tablas, algún campo se debió haber usado para relacionar las tablas y ese campo debe ser una clave primaria, me resisto a creer que las tablas no están relacionadas entre sí. Ojo que una clave primaria no necesariamente es numérica y secuencial, quizá estas confundiendo.

    Creo que antes de implementar columnas deberías analizar a detalle como está estructurada la base de datos.

    Coméntanos como te fue.

    lunes, 10 de agosto de 2015 5:23
  • Hola ajbg,

    ¿Tablas sin clave primaria? Algún campo debe tener el rol de indicador único (aunque no se haya definido la restricción Primary Key), porque entonces ¿cómo están relacionadas las tablas? ¿Qué campo único referencia a la tabla base?. Mencionas que tienes mas de 200 tablas, algún campo se debió haber usado para relacionar las tablas y ese campo debe ser una clave primaria, me resisto a creer que las tablas no están relacionadas entre sí. Ojo que una clave primaria no necesariamente es numérica y secuencial, quizá estas confundiendo.

    Creo que antes de implementar columnas deberías analizar a detalle como está estructurada la base de datos.

    Coméntanos como te fue.


    si hay una clave primaria, yo estoy haciendo un proyecto en el frameword symfony2, cuando uso ingeniería inversa para que el me cree las entidades el me pide un id y que sea clave primaria, y como ya hay un sistema que no es web funcionando, no quiero romper la estructura solo agregar un campo id y rellenarlo secuencialmente, después yo le asigno la clave primaria para que doctrine2 me pueda manejar la tabla
    martes, 11 de agosto de 2015 6:29
  • Hola,

    Podrías tratar así:

    DECLARE @IdAct INT;
    SET @IdAct = 0 
    UPDATE 
    	TuTabla
    SET 
    	@IdAct = Id = @IdAct + 1 
    GO 

    Saludos!


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Herbert Mendoza


    voy a probar el código y cuento como me fue
    martes, 11 de agosto de 2015 6:30
  • Hola ajbg,

    Entiendo, ¿pero si ya existe una restricción de primary key, como es que creas otra primary key?. Algo no termino de entender, pero para el caso puntual haz algo mas simple, al momento de crear la nueva columna en la tabla has que se inserten los valores de manera secuencial, no hagas doble paso.

    Intenta hacer lo siguiente:

    ALTER TABLE MiTabla ADD id int IDENTITY(1,1) NOT NULL;

    Con ello creas la columna y además generas los id de manera secuencial sin mas pasos que hacer.


    martes, 11 de agosto de 2015 13:38