Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   cambiar campo null a not null (https://www.clubdelphi.com/foros/showthread.php?t=35697)

andressanchez 18-09-2006 21:27:04

cambiar campo null a not null
 
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,

Cita:

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:

Código SQL [-]
update rdb$relation_fields set
rdb$null_flag = 1
where (rdb$field_name = 'CAMPO')
and (rdb$relation_name = 'TABLA');

Y luego hacer un update:

Código SQL [-]
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.


La franja horaria es GMT +2. Ahora son las 22:38:20.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi