locked
MODIFICAR LLAVE PRIMARIA EN SQL 2000 RRS feed

  • Pregunta

  • Hola amigos . estoy trabajando en SQL 2000 mi problema es que quiero cambiar la clave primaria de un registro. Este es mi clave 3221 este quiero cambiar 3220 a traves del Analizador de Consultas. Gracias 
    miércoles, 21 de julio de 2010 20:07

Respuestas

  • Al parecer, el usuario resolvió el problema por él mismo o perdió interés en ello. En general, las modificaciones en la clave primaria de una tabla se deben tratar más como un insert + delete que como un update. Así, primero se haría la inserción del nuevo registro, luego se reapuntan todas las referencias al registro nuevo (foreign keys, etc) y por último se borra el registro primitivo.

    Doy el hilo por cerrado.


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    martes, 17 de agosto de 2010 9:59
    Moderador

Todas las respuestas

  • El problema seguramente esté en que tengas registros en otras tablas (o en la misma) relacionados con ese registro.  En ese caso lo que deberías hacer es crear un nuevo registro con la nueva clave, modificar todos los registros relacionados para que en lugar de "apuntar" a 3221 "apunten" a 3220, y luego eliminar el registro con 3221.

    Cabe mencionar que te conviene hacer este trabajo transaccionado.

    Espero se entienda, sino avísame.

    Suerte!


    Para el correcto funcionamiento y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido útil por favor Vótala.

    Gustavo A. Cantero
    Scientia® Soluciones Informáticas
    MCP - MCSD - MCTS - MCPD
    http://www.scientia.com.ar
    http://www.programandoamedianoche.com
    http://www.gustavo-cantero.com.ar
    http://twitter.com/ScientiaIT
    http://facebook.com/ScientiaIT
    miércoles, 21 de julio de 2010 20:17
  • Hola.

    En cuanto a la sentencia en sí, sería más o menos:

    update MiTabla set Clave = 3220 where Clave = 3221

     


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    miércoles, 21 de julio de 2010 20:30
    Moderador
  • El problema seguramente esté en que tengas registros en otras tablas (o en la misma) relacionados con ese registro.  En ese caso lo que deberías hacer es crear un nuevo registro con la nueva clave, modificar todos los registros relacionados para que en lugar de "apuntar" a 3221 "apunten" a 3220, y luego eliminar el registro con 3221.

    Cabe mencionar que te conviene hacer este trabajo transaccionado.

    Espero se entienda, sino avísame.

    Suerte!


    Para el correcto funcionamiento y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido útil por favor Vótala.

    Gustavo A. Cantero
    Scientia® Soluciones Informáticas
    MCP - MCSD - MCTS - MCPD
    http://www.scientia.com.ar
    http://www.programandoamedianoche.com
    http://www.gustavo-cantero.com.ar
    http://twitter.com/ScientiaIT
    http://facebook.com/ScientiaIT

    Es justamen que no quiero eliminar el registro por que tengo relacionado la tabla con otras.
    miércoles, 21 de julio de 2010 20:42
  • Hola.

    En cuanto a la sentencia en sí, sería más o menos:

    update MiTabla set Clave = 3220 where Clave = 3221

     


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)

    Clave es mi llave primaria en la base de Datos y esta relacionado con otras tablas y no permite modificar por ningun lado ya prove por el administrador coorporativo pero quisiera una opcion de modificar llave primaria.
    miércoles, 21 de julio de 2010 20:44
  • Pero no digo que lo elimines, sino que lo dupliques (con la nueva clave) y apuntes tus registros a este nuevo registro.  Luego SI tendrias que eliminar el original, dejando sólo la copia con la nueva clave.

    Saludos.


    Para el correcto funcionamiento y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido útil por favor Vótala.

    Gustavo A. Cantero
    Scientia® Soluciones Informáticas
    MCP - MCSD - MCTS - MCPD
    http://www.scientia.com.ar
    http://www.programandoamedianoche.com
    http://www.gustavo-cantero.com.ar
    http://twitter.com/ScientiaIT
    http://facebook.com/ScientiaIT
    miércoles, 21 de julio de 2010 20:55
  • Gatukzo,

    Tienes que tener mucho cuidado con la integridad referencial, pues cuando defines una columna de la tabla como su clave primaria es porque este identificador es único y no varía tanto para la tabla. Por otro lado, tienes que pensar si haz definido relaciones de esa tabla con otras y es a través de esa clave primaria, porque no puedes dejar registros huérfanos en las otras tablas apuntando a una clave primaria que ya no existe. 

    Si definiste relaciones de esta tabla con otras tablas  y quieres cambiar la clave primaria, solo tienes que entrar al Diseño de la Tabla y especificar en las Relationships o Foreign Key qué tipo de acciones se van a ejecutar cuando cambie la clave primaria con respecto a las tablas relacionadas, éstas son: Ninguna (la restringe) o en Cascada (actualiza los registros relacionados en las otras tablas). Si tu necesidad es muy puntual, sólo para este registro, esto es una buena opción. Significa, si la llegas a activar, que cuando ejecutes la instrucción

    UPDATE mitabla set claveprimaria=otro valor where claveprimaria = valororiginal

    la actualización se va a realizar para todas las tablas que apunten a esa clave primaria. Si no hay ningún registro relacionado, pues solo cambiará en tu tabla principal.

     

    Si tu necesidad no e smuy puntual, sino que es un valor que cambia siempre, te sugiero que no actives la actualización en cascada y revises bien tu diseño, puede haber algo mal que te apunte a que la clave primaria no sea esa sino otra columna. Particularmente,  soy partidaria de controlar por software actualizaciones a la clave primaria y no por base de datos, a menos que sea algo muy puntual y extremo, por ejemplo, que esté en casos de migraciones, consolidaciones, etc.

    Revisa bien este tema y te dejo un link para que le des una ojeada. Espero te sirva

    http://support.microsoft.com/kb/142480/es

     

    Saludos,

    Mary.-

     

    jueves, 22 de julio de 2010 4:19
  • Hola.

    ¿Resolviste el problema?


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    sábado, 7 de agosto de 2010 15:00
    Moderador
  • Hola.

    ¿Resolviste el problema?


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    Sigo con el problema amigo.
    martes, 10 de agosto de 2010 15:10
  • Hola.

    Vamos a ver si empezando desde el principio lo podemos resolver. Tienes una tabla, con su clave primaria y necesitas modificar el valor de esa clave de un número 3221 a un número 3220. ¿Puedes decirnos cuál es el motivo por el que has de hacer este cambio? A lo mejor, sabiendo el motivo descubrimos que la mejor forma de solventar la situación es dando un rodeo por otra parte.

    Tú ejecutas la sentencia de update (la que yo te envié) y te da un error. ¿Qué error te da exactamente? Ahora mismo no sé si te da error por integridad referencial, por clave duplicada o por otro motivo.

     

     


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    martes, 10 de agosto de 2010 15:19
    Moderador
  • Al parecer, el usuario resolvió el problema por él mismo o perdió interés en ello. En general, las modificaciones en la clave primaria de una tabla se deben tratar más como un insert + delete que como un update. Así, primero se haría la inserción del nuevo registro, luego se reapuntan todas las referencias al registro nuevo (foreign keys, etc) y por último se borra el registro primitivo.

    Doy el hilo por cerrado.


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    martes, 17 de agosto de 2010 9:59
    Moderador