2016-08-19 3 views
1

kann ich die Liste des Fremdschlüssel-Constraints mit einem bestimmten Tabellennamen erhalten, indemWie kann ich die Liste der keine Fremdschlüssel Einschränkung erhalten?

EXEC sp_fkeys 'TableName' 

mit Aber ich brauche die Liste aller Tabellen zu erhalten, die keine Fremdschlüssel-Constraints zu anderen Tabellen haben.

Vielen Dank im Voraus.

+0

was? Ich bin unklar !! – techspider

+0

Entschuldigung für die Verwirrung. Ich habe den Inhalt bearbeitet und hoffe, dass es jetzt Sinn macht. – JackTheRipper

Antwort

1

Diese Abfrage unten gibt Ihnen alle Tabellen, die einen Fremdschlüssel

SELECT s.name [Schema], t.name [Table] 
FROM sys.tables AS t 
INNER JOIN sys.schemas AS s 
    ON t.[schema_id] = s.[schema_id] 
WHERE NOT EXISTS (SELECT 
    1 
FROM sys.foreign_keys AS fk 
WHERE fk.parent_object_id = t.[object_id]); 

Diese Logik bei this site haben nicht geschrieben von einer Reihe von verwandten Abfragen inspiriert ist.

+0

Vielen Dank! Sehr nützliche Website, ich werde auf jeden Fall ein Lesezeichen setzen. – JackTheRipper

0

Hier ist eine weitere Option mit EXCEPT.

select name 
from sys.tables 
except 
(
    select OBJECT_NAME(parent_object_id) 
    from sys.foreign_keys 
) 
order by name 
+0

Das funktioniert auch. Danke @Sean. – JackTheRipper

+0

Eine Sache, die ich bemerkt habe. Dadurch werden Tabellen nicht korrekt identifiziert, wenn Sie in mehreren Schemas denselben Namen haben. Wenn eine dieser Tabellen einen Fremdschlüssel hat und die andere nicht, wird sie trotzdem von dieser Abfrage zurückgegeben. –

+0

Danke für die Benachrichtigung. Ich arbeite mit einem einzigen Schema, also hat es im Moment funktioniert. Das werde ich für die Zukunft behalten. – JackTheRipper

Verwandte Themen