PDA

Ver la Versión Completa : cambiar campo null a not null


andressanchez
18-09-2006, 21:27:04
Hola foristas

Mi problema es el siguiente, tengo una tabla donde todos los campos aceptan valores nulos y quiero establecer un primary key. Cuando corro el script no cambia la estructura porque el campo acepta valores nulos y el manejador de BD (firebird) no permite la creacion de primary key con campos que acepten valores nulos. No sé como modificar la estructura. He buscado en el foro al respecto pero no encuentro algo similar.

Agradesco sus atenciones.

Gracias de antemano.

dec
18-09-2006, 21:34:50
Hola,


Cuando corro el script no cambia la estructura porque el campo acepta valores nulos y el manejador de BD (firebird) no permite la creacion de primary key con campos que acepten valores nulos.


Creo que es el campo "primary key" el que no puede ser nulo, pero, el resto de campos sí que pueden serlo, ¿me equivoco? ;)

andressanchez
18-09-2006, 21:37:04
Exactamente, necesito establecer un campo not null para poder hacer un Primary key. La tabla ya esta creada y tiene datos.

maeyanes
18-09-2006, 21:37:20
Creo que la única forma de lograrlo sería modificando una tabla del sistema de Interbase:


update rdb$relation_fields set
rdb$null_flag = 1
where (rdb$field_name = 'CAMPO')
and (rdb$relation_name = 'TABLA');


Y luego hacer un update:


update TABLE
set CAMPO = xxx
where CAMPO IS NULL;



Saludos...

andressanchez
18-09-2006, 21:39:27
Muchas gracias, voy a probar a ver que pasa. Luego te cuento como me fue.

maeyanes
18-09-2006, 21:40:54
Has un backup de tu base de datos antes de intentar este o cualquier otro cambio a la metadata de los objetos de la misma.



Saludos...

andressanchez
18-09-2006, 21:50:43
ya modifique la tabla del sistema de Interbase y corrio perfecto.

ahora bien no entiendo lo del update...

maeyanes
18-09-2006, 21:54:12
El update lo ejecutas para que los registros que tienen ese campo establecido en nulo ya no lo tengan y no te de errores de clave primaria nula.

Ahora, al ser clave primaria, lo mejor sería que hicieras algún procedimiento almacenado que establezca un valor único a cada registro, a menos claro, que estos ya estén así.



Saludos...

andressanchez
18-09-2006, 22:00:09
Este campo se alimenta de un generador, cada vez que se dispara el trigger before insert.

Muchas gracias por tus respuestas me ayudaron mucho.