FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Borrar clave ajena sin nombre
Buenos días, quería saber si existe la opción (o instrucción) para en una base de datos Firebird eliminar claves ajenas que no tienen nombre, es decir que son del tipo INTEG_XXXX. En su día no se les puso nombre, o sea se crearon con la instrucción "ALTER TABLE FACTURAS ADD FOREIGN KEY (CLIENTE) REFERENCES CLIENTES (CODIGO)" Y ahora se quieren modificar esas claves ajenas, y claro lo más rápido es preparar un "script" pero desconozco si puedo eliminar todas las claves ajenas que no tienen nombre de algun modo rápido.
Gracias! |
#2
|
||||
|
||||
Hola.
Aunque tu no les pusieras nombre, el sistema les asignó uno, así que solo tienes que utilizar un Administrador de Firebird, como el IB-Expert, para ver que nombre les asignó, y crear un script en consecuencia. http://ibexpert.net/ibe/index.php?n=...ersonalEdition Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#3
|
|||
|
|||
Si, correcto, el problema que tengo (veo que no me he explicado bien, perdón!, jeje) es que el "script" va a ser utilizado en muchas BBDDs iguales, con lo cual en cada una de ellas tendrá un nombre distinto, es por ello por lo cual necesito un "estandar" o algo similar para realizar el borrado de estas claves sin tener que ver el nombre en cada BBDD.
Gracias! |
#4
|
||||
|
||||
Hola.
Ahora comprendo el problema. Puedes utilizar las tablas de sistema para identificar todas las claves foráneas de tu tabla, y después con un EXECUTE STATEMENT, eliminarlas. Tablas de Sistema de Firebird : http://www.alberton.info/firebird_sql_meta_info.html En concreto, creo que necesitas : SELECT RDB$INDEX_NAME FROM RDB$INDICES WHERE RDB$RELATION_NAME='Nombre de la Tabla' AND RDB$FOREIGN_KEY IS NOT NULL Funcionamiento del EXECUTE STATEMENT : http://www.firebirdsql.org/refdocs/l...-execstat.html NOTA: Esto lo puedes hacer, por ejemplo en un procedimiento almacenado (con un bucle FOR sobre el SELECT para las claves foráneas). Por lo que tu script daría de alta el procedimiento almacenado, lo ejecutaría con un "execute procedure" y finalmente lo eliminaría. Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#5
|
|||
|
|||
Por ahí deben ir los tiros, pero ejecutando la select que me pasas solo obtengo 9 claves ajenas a mi tabla de clientes, y a partir del script he visto que en la BBDD que estoy analizando hay 32! Así que no me las muestra todas.
No habría manera de eliminar todas las claves ajenas que apuntan a una tabla y luego las vuelvo a generar? Gracias de nuevo! |
#6
|
|||
|
|||
Creo y digo creo pq el tema de los índices no lo domino mucho, así que puede que suelte alguna barbaridad.
Creo que las claves ajenas que me muestra tu select son las que tienen algún índice asociado, eso quiere decir que el resto no tienen ninguno. No se si voy por buen camino... Gracias de nuevo |
#7
|
||||
|
||||
Que yo sepa no hay ninguna instrucción SQL que haga exactamente eso, y por lo que respecta a que solo veas 9 índices en lugar de 32, creo que deberías asegurarte con un Administrador como el IB-Expert en lugar de basarte solo en los scripts (puede ser que ya se hayan borrado algunos de esos índices).
Ya que en las tablas de Metadata tienes toda la información de la base de datos, así que si un índice existe, tiene que estar en la tabla rdb$indices.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#8
|
||||
|
||||
Sí, pero es que hasta donde yo sé siempre que declaras una clave foránea, se crea un índice asociado.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#9
|
|||
|
|||
Si si, confirmado las 32 claves ajenas (bueno valeeee, la mayoría no he comprobado las 32 ) si que existen, pero en la select solo me muestra una parte.
|
#10
|
||||
|
||||
Esa consulta la he sacado a botepronto, si no funciona entonces tienes que leer la documentación disponible de los metadatos en Firebird, para ver donde está el problema y determinar la consulta correcta.
http://www.alberton.info/firebird_sql_meta_info.html http://www.felix-colibri.com/papers/...em_tables.html http://www.chillisoft.co.za/blog/?p=165 Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#11
|
||||
|
||||
Hola Kubelo, la consulta para obtener las claves foraneas, creo que debería ser esta:
para borrar:
pero no te borra el campo, solo la relación que has hecho para que sea clave foranea. Para borrar el campo fisicamente tendras que hacerlo con Alter Table Tabla Drop .... Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar. |
#12
|
|||
|
|||
Eso no me sirve Caro, ya que borra todas las claves ajenas y solo necesitaba que se me borren las que apunten a la tabla que yo decido.
Dicho esto os pongo la solución que al final dimos con ella! Jeje DELETE FROM RDB$REF_CONSTRAINTS WHERE RDB$CONST_NAME_UQ = (select RDB$CONSTRAINT_NAME from RDB$RELATION_CONSTRAINTS WHERE RDB$CONSTRAINT_TYPE = 'PRIMARY KEY' AND RDB$RELATION_NAME = 'CLIENTES') Esto borra todas las claves ajenas (TABLA REF_CONSTRAINTS) que apuntan a la tabla cuya clave primaria tiene como identificador la segunda select. Gracias por la ayuda prestada, me iré a casa con una sonrisa hoy |
#13
|
||||
|
||||
, si querías de una tabla especifica en mi consulta solo faltaba preguntar por esa tabla en el where:
Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Borrar con ADO.NET sin Clave Principal | camomilass | Conexión con bases de datos | 2 | 15-01-2007 17:24:03 |
Extraer datos de una pagina en java que tiene clave (sabiendo la clave claro) ;) | kalimocho | Internet | 2 | 29-06-2005 05:11:24 |
"Dexter" nombre clave de Delphi 2006 | Epachsoft | Noticias | 4 | 19-06-2005 18:49:16 |
Borrar clave en tabla paradox | CFPA86 | Varios | 1 | 17-08-2004 12:37:55 |
Problemas violación clave ajena desde Builder | melanthea | C++ Builder | 5 | 25-06-2004 18:42:11 |
|