Hulp bij SQL query voor een lijst met columns incl foreignkeys

Status
Niet open voor verdere reacties.

ranja3000

Nieuwe gebruiker
Lid geworden
15 jan 2010
Berichten
2
Hallo,


Doormiddel van een query wil ik graag een lijst hebben met alle columns én foreignkeys van een database.

Het is gelukt om een lijst te krijgen met alle columns zonder foreignkeys doormiddel van de volgende query:

[SQL]SELECT TABLE_NAME,COLUMN_NAME,ORDINAL_POSITION
FROM INFORMATION_SCHEMA.columns
ORDER BY TABLE_NAME, ORDINAL_POSITION ASC[/SQL]


Via google heb ik een query gevonden voor alle foreignkeys:

[SQL]SELECT
tblALL.table_name as PrimaryTableName,
tblAll.column_name as PrimaryTableColumn,
tblFK.table_name as ForeignKeyTable,
tblFK.column_name as ForeignKeyColumn
from INFORMATION_SCHEMA.constraint_column_usage tblall

inner join information_schema.referential_constraints tblAllFK on
tblAllFK.unique_constraint_name = tblAll.constraint_name

inner join information_schema.constraint_column_usage tblFK on
tblAllFK.constraint_name=tblFK.constraint_name[/SQL]


Graag zou ik deze twee querys willen combineren waardoor ik één lijst heb met alle columns en foreignkeys.

Ik hoop dat iemand kan helpen. Alvast dank!
 
Het lijkt mij dat de eerste query alle kolommen geeft, niet slechts de kolommen zonder foreign key, zoals je zelf beweert.

Mocht ik dit mis hebben, dan zou je de twee queries samen kunnen voegen met een UNION, maar dan moeten ze wel evenveel kolommen (en kolommen van hetzelfde datatype) hebben.

Dit kan bijvoorbeeld door in de eerste query twee lege kolommen toe te voegen en de ordinal position weg te laten (of je voegt een soort kunstmatige ordinal position toe in de tweede query).

Mocht ik gelijk hebben en de eerste query geeft inderdaad alle kolommen, dan kun je denk eenvoudigweg de eerste query LEFT OUTER JOINen met de tweede query (op TABLE_NAME = PrimaryTableName AND COLUMN_NAME = PrimaryTableColumn).
 
Excuses voor de late reactie en bedankt voor je reactie plagvreugd

Het is inmiddels gelukt met de volgende query:

[SQL]SELECT c.TABLE_CATALOG, c.TABLE_NAME, c.COLUMN_NAME, c.ORDINAL_POSITION,ISNULL(tblpk.CONSTRAINT_TYPE,''), c.IS_NULLABLE, ISNULL(c.COLUMN_DEFAULT,''),ISNULL(tblfk.table_name,''), ISNULL(tblfk.column_name, '')
FROM INFORMATION_SCHEMA.COLUMNS c
LEFT JOIN INFORMATION_SCHEMA.constraint_column_usage tblall ON c.table_name = tblall.table_name AND c.column_name = tblall.column_name
LEFT JOIN information_schema.referential_constraints tblAllFK ON tblAll.constraint_name = tblAllFK.constraint_name
LEFT JOIN information_schema.table_constraints tblPK on tblPK.CONSTRAINT_TYPE = 'PRIMARY KEY' and tblpk.constraint_name = tblall.constraint_name
LEFT JOIN information_schema.constraint_column_usage tblFK ON tblAllFK.unique_constraint_name = tblFK.constraint_name
ORDER BY c.TABLE_NAME, c.ORDINAL_POSITION ASC[/SQL]
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan