elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  modificar llave primaria desde un programa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: modificar llave primaria desde un programa  (Leído 3,180 veces)
C4iN

Desconectado Desconectado

Mensajes: 3


Ver Perfil
modificar llave primaria desde un programa
« en: 18 Julio 2012, 02:26 am »

hola amigos, necesitaria saber algo.
tengo un programa en el cual uso una base de datos sql server.
la base de datos tiene 5 tablas, pero digamos que tiene en un momento una tabla llamada personas y otras dos que estan conectadas con esta. el tema es que desde mi aplicacion quiero cambiar el valor de la llave primaria DNI en cualquier tabla y quisiera que en primer lugar me deje hacerlo, y en segundo lugar que se actualice el valor de la llave primaria en todas las tablas que dependen de la tabla maestro del dni.

estuve investingando pero esto no estoy seguro de como hacerlo
algunos mensajes que me parecieron interesantes:

Citar
Realmente no se puede cambiar de forma directo.

Lo que tendrias que hacer es crear nuevamente en labla padre nuevamente el registro y luego en la tabla hija. finalmente eliminar de las dos tablas el registro viejo.

La otra opción es eliminar primero el constraint que une las dos tablas, hacer el update en las dos tablas y volver a crear el contraint.

Citar
Si hay "dependencias" de la clave primaria, cada motor reaccionará de manera diferente ante la situación. En el caso particular de interbase, no te deja eliminar la clave primaria, no por el riesgo de perdida de información que has mencionado, sino porque las llaves foraneas no pueden quedar huerfanas, en el sentido de que no tienen a donde apuntar.

Por ello, es necesario que primero borres todas las llaves foraneas, luego la llave primaria, crees la nueva y después crees las nuevas llaves foraneas (si existen).

Aprovecho para comentar también que una llave primaria puede eliminarse no solo con su nombre (drop constraint), pero también con la instrucción:
Código SQL [-]
Alter table nombre_tabla drop primary key;

Por último, motores como Oracle han introducido alguna forma de eliminar automáticamente las dependencias. En el caso específico de Oracle la instrucción es:

Código SQL [-]
Alter table nombre_tabla drop primary key cascade constraints;

Hasta luego.


Citar
Tengo una duda respecto a la instrucción que habeis puesto antes.
Tengo una tabla en paradox con una clave primaria puesta que quiero modificar.
Si esta tabla tuviera un indice secundario sabría que su nombre sería por ej 'idescripcion' para poder buscar la descripcion pero que nombre tiene una clave primaria?

ALTER TABLE "TABLA" DROP CONSTRAINT "CLAVE PRIMARIA"

de esta instrucción puedo poner

"Tabla" el nombre de mi tabla Tabla.Db
Pero en "Clave primaria"? mmm esto no lo comprendo

Muchas gracias

Citar
si pero tb tendrias q actualizar las tablas a las cuales esta relacionada

Citar

You don't have to give ON DELETE CASCADE or ON UPDATE CASCADE to foreign key. Basically,
this is given on the primary key to say that if the record (in primary key table) is deleted or updated,
reflect the changes in all the tables where the primary key table is referenced via foriegn key.
references Alumnos(DNI) ON UPDATE CASCADE ON DELETE CASCADE

esta es la informacion que he eonctrado en la web, pero no estoy seguro de como hacerlo ya que osy nuevo en esto.

mi codigo de las tablas


Código:

create table Localidades(
codLocalidad int primary key not null identity(1,1),
Localidad nchar (50) not null,
Provincia nchar (50) not null
)

go

create table Personas(
DNI int primary key not null,
Nombre nchar (50) not null,
Apellido nchar (50) not null,
codLocalidad int not null,      
constraint FK_Personas1 foreign key (codLocalidad) references Localidades(codLocalidad)
)

go

create table Capacitaciones(
codCapacitacion char (5) not null,
NombreCapacitacion  nchar (50) not null,
FechaInicio smalldatetime,
FechaFin smalldatetime,
constraint PK_Capacitacion1 primary key(codCapacitacion)
)


go

create table Capacitacion_Por_Persona(
codCapacitacion char (5) not null,
DNI int not null,
constraint PK_Capacitacion primary key(codCapacitacion,DNI),

constraint FK_Capacitacion_Por_Persona1 foreign key (codCapacitacion) references Capacitaciones(codCapacitacion),
constraint FK_Capacitacion_Por_Persona2 foreign key (DNI) references Personas(DNI)
)



yo quisiera desde mi programa cambiar el dni en cualquier tabla y si es llave primaria en dicha tabla o no, de cualquier forma que se actualice. agradeceria su ayuda gentilmente

como lo puedo hacer?





« Última modificación: 18 Julio 2012, 02:28 am por C4iN » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Llave usb aladdin desde 0 programa kotza software
Ingeniería Inversa
cazurro 2 3,936 Último mensaje 16 Noviembre 2011, 20:28 pm
por cazurro
eliminar llave primaria
Bases de Datos
m@o_614 1 3,605 Último mensaje 4 Mayo 2013, 04:39 am
por Carloswaldo
ayuda con estrategia de llave primaria en tabla
Bases de Datos
d91 0 2,214 Último mensaje 8 Diciembre 2015, 16:57 pm
por d91
PHP y MYSQL relacion de llaves foraneas con llave primaria avanzado..
PHP
ppfenix79 2 2,799 Último mensaje 10 Febrero 2016, 18:14 pm
por MinusFour
Llave primaria compuesta
Bases de Datos
SilverLycan68 1 1,858 Último mensaje 23 Enero 2019, 11:39 am
por MCKSys Argentina
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines