Principale utente con più risposte
Query per relazioni data una tabella

Domanda
-
Ciao a tutti
c'è modo via query di sapere le relazioni tra le tabelle di un database SqlServer?
Nello specifico mi servirebbe sapere dato il nome di una tabella quali sono le relazioni 1 a 1, 1 a N con le tabelle a lei relazionate, mostrando anche la colonna FK da una parte a PK dall'altra.
Con questa query riesco forse a capire le 1 a N, ma non le 1 a 1.
DECLARE @tablename VARCHAR(MAX)
SET @tablename = 'Subjects'
SELECT OBJECT_NAME(rkeyid) Parent_Table,
OBJECT_NAME(fkeyid) Child_Table,
OBJECT_NAME(constid) FKey_Name,
c1.name FKey_Col,
c2.name Ref_KeyCol, *
FROM sys.sysforeignkeys s
INNER JOIN sys.syscolumns c1
ON (s.fkeyid = c1.id AND s.fkey = c1.colid)
INNER JOIN syscolumns c2
ON (s.rkeyid = c2.id AND s.rkey = c2.colid)
WHERE OBJECT_NAME(rkeyid) = @tablename
ORDER BY
Parent_Table,
Child_TableRiuscite ad aiutarmi?
GRAZIE
- Modificato Pengo11 giovedì 16 maggio 2019 15:19
Risposte
-
ho visto ora che non fornisce la risposta che ti serve.
prova a vedere la risposta del thread linkato qui sotto
Edoardo Benussi
Microsoft MVP - Cloud and Datacenter Management
e[dot]benussi[at]outlook[dot]it- Contrassegnato come risposta Edoardo BenussiMVP, Moderator lunedì 3 giugno 2019 10:58
-
per la tua ultima domanda vedi questa soluzione
Edoardo Benussi
Microsoft MVP - Cloud and Datacenter Management
e[dot]benussi[at]outlook[dot]it- Contrassegnato come risposta Edoardo BenussiMVP, Moderator lunedì 3 giugno 2019 10:58
Tutte le risposte
-
-
Ciao
la tua query vedo che ritorna le relazioni Molti a Uno (ti torna?) che può andarmi bene in quanto sono quelle che devo eliminare, ma non riesco ancora ad identificare le relazioni Uno a Molti e Uno a Uno che è quello che devo recuperare.
Grazie
- Modificato Pengo11 giovedì 16 maggio 2019 21:08
-
-
Quello che mi servirebbe è, data una tabella (in questo esempio "Subject"), avere un elenco di records in cui vengano estratte le relazioni 1 a N e 1 a 1 con altre tabelle. Nell'esempio in foto, avere quindi un record in cui so che la relazione con GroupSubject è di tipo 1 a N (partendo come dato sempre dalla tabella passata, quindi Subject) e un secondo record, in cui io sappia che la relazione con SubjectInfo è di tipo 1 a 1. NON mi serve avere invece il record della relazione con Customer. La query quindi dovrebbe tornare 2 record.
E' fattibile? GRAZIE
-
prova a vedere se ti aiuta questo articolo
https://dataedo.com/kb/query/sql-server/list-tables-with-most-relationships
Edoardo Benussi
Microsoft MVP - Cloud and Datacenter Management
e[dot]benussi[at]outlook[dot]it -
-
ho visto ora che non fornisce la risposta che ti serve.
prova a vedere la risposta del thread linkato qui sotto
Edoardo Benussi
Microsoft MVP - Cloud and Datacenter Management
e[dot]benussi[at]outlook[dot]it- Contrassegnato come risposta Edoardo BenussiMVP, Moderator lunedì 3 giugno 2019 10:58
-
Ciao e grazie per l'articolo che è molto utile. Rileva perfettamente le relazioni, ma manca ancora l'ultimo pezzettino: non distingue tra le relazioni uno a uno e uno a molti. Le identifica nello stesso modo, ma come faccio a distinguerle?
Grazie!
- Modificato Pengo11 lunedì 27 maggio 2019 07:30
-
per la tua ultima domanda vedi questa soluzione
Edoardo Benussi
Microsoft MVP - Cloud and Datacenter Management
e[dot]benussi[at]outlook[dot]it- Contrassegnato come risposta Edoardo BenussiMVP, Moderator lunedì 3 giugno 2019 10:58