Pregunta

En el servidor Derby, ¿cómo se puede utilizar la información de las tablas del sistema del esquema para crear una instrucción de selección con el fin de recuperar los nombres de restricción para cada tabla?

¿Fue útil?

Solución

El manual de referencia es el Derby Manual de referencia . Hay muchas versiones disponibles:. 10.13 era corriente en abril de 2017, pero fue 10.3 en el de mayo de 2009

Respuesta original

SELECT c.constraintname, t.tablename
    FROM sysconstraints c, systables t
    WHERE c.tableid = t.tableid;

Desde versiones recientes de Derby suficientemente requieren que las tablas de catálogo del sistema tienen el prefijo sys. (10.13 es citado por kiwicomb123 ), se puede revisar la consulta para utilizar unirse a la explícita notación también, y su uso:

SELECT c.constraintname, t.tablename
  FROM sys.sysconstraints c
  JOIN sys.systables t
    ON c.tableid = t.tableid;

Puede agregar columnas adicionales -. Por ejemplo, c.type para obtener el tipo de restricción

Otros consejos

SELECT sc.schemaname, co.constraintname, t.tablename, cg.descriptor, t2.tablename, cg2.descriptor, f.deleterule, f.updaterule
FROM sys.sysconstraints co
JOIN sys.sysschemas sc ON co.schemaid = sc.schemaid
JOIN sys.systables t ON co.tableid = t.tableid
JOIN sys.sysforeignkeys f ON co.constraintid = f.constraintid
JOIN sys.sysconglomerates cg ON f.conglomerateid = cg.conglomerateid
JOIN sys.sysconstraints co2 ON f.keyconstraintid = co2.constraintid
JOIN sys.systables t2 ON co2.tableid = t2.tableid
JOIN sys.syskeys k ON co2.constraintid = k.constraintid
JOIN sys.sysconglomerates cg2 ON k.conglomerateid = cg2.conglomerateid
WHERE co.type = 'F' 
    and sc.schemaname = current schema    

las dos entradas de descriptor contienen una lista de números de columna para cada tabla, como

BTREE (2,1)

donde los números corresponden a los números de las columnas de la tabla syscolumns para la tabla correspondiente.

Si alguien tiene una forma elegante de extracción de esto en esta consulta, me gustaría saber. Me estoy haciendo una lista de todas las columnas de una tabla en una consulta independiente y extraer los nombres de que después de analizar los descriptores para obtener los números.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top