986 Stimmen

Wie kann ich alle Fremdschlüssel auflisten, die auf eine bestimmte Tabelle in SQL Server verweisen?

Ich muss eine stark referenzierte Tabelle in einer SQL Server-Datenbank entfernen. Wie kann ich eine Liste aller Fremdschlüsselbegrenzungen erhalten, die ich entfernen muss, um die Tabelle zu löschen?

(SQL-Antworten sind dem Herumklicken in der GUI des Management-Studios vorzuziehen).

0 Stimmen

Siehe Wie man alle Fremdschlüssel einer Tabelle ausschreibt für Hilfe. Update : Link nicht mehr verfügbar, aber das relevante SQL wurde kopiert als eine Antwort zu einer verwandten Frage. Sie können die Abhängigkeiten auch über die grafische Benutzeroberfläche anzeigen.

13voto

Anvesh Punkte 6100

Ich verwende dieses Skript, um alle Details im Zusammenhang mit dem Fremdschlüssel zu finden. Ich verwende INFORMATION.SCHEMA. Nachfolgend finden Sie ein SQL-Skript:

SELECT 
    ccu.table_name AS SourceTable
    ,ccu.constraint_name AS SourceConstraint
    ,ccu.column_name AS SourceColumn
    ,kcu.table_name AS TargetTable
    ,kcu.column_name AS TargetColumn
FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu
    INNER JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc
        ON ccu.CONSTRAINT_NAME = rc.CONSTRAINT_NAME 
    INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu 
        ON kcu.CONSTRAINT_NAME = rc.UNIQUE_CONSTRAINT_NAME  
ORDER BY ccu.table_name

8voto

irfandar Punkte 1540

Erste

EXEC sp_fkeys 'Table', 'Schema'

Dann verwenden Sie NimbleText um mit Ihren Ergebnissen zu spielen

5voto

Veer Punkte 1535
SELECT
OBJECT_NAME(parent_object_id) 'Parent table',
c.NAME 'Parent column name',
OBJECT_NAME(referenced_object_id) 'Referenced table',
cref.NAME 'Referenced column name'
FROM 
sys.foreign_key_columns fkc 
INNER JOIN 
sys.columns c 
   ON fkc.parent_column_id = c.column_id 
      AND fkc.parent_object_id = c.object_id
INNER JOIN 
sys.columns cref 
   ON fkc.referenced_column_id = cref.column_id 
      AND fkc.referenced_object_id = cref.object_id  where   OBJECT_NAME(parent_object_id) = 'tablename'

Wenn Sie die Fremdschlüsselbeziehung aller Tabellen erhalten möchten, schließen Sie die where Klausel, sonst schreiben Sie Ihren Tabellennamen anstelle von tablename

5voto

Mashood Murtaza Punkte 437

Bevorzugte Antwort von @BankZ

sp_help 'TableName'   

zusätzlich für verschiedene Schemata

sp_help 'schemaName.TableName'

5voto

Mark Varnas Punkte 611

Einige gute Antworten oben. Aber ich ziehe es vor, die Antwort mit eine Abfrage. Dieser Teil des Codes stammt aus sys.sp_helpconstraint (sys proc)

Auf diese Weise ermittelt Microsoft, ob der tbl Fremdschlüssel zugeordnet sind.

--setup variables. Just change 'Customer' to tbl you want
declare @objid int,
    @objname nvarchar(776)
select @objname = 'Customer'    
select @objid = object_id(@objname)

if exists (select * from sys.foreign_keys where referenced_object_id = @objid)
    select 'Table is referenced by foreign key' =
        db_name() + '.'
        + rtrim(schema_name(ObjectProperty(parent_object_id,'schemaid')))
        + '.' + object_name(parent_object_id)
        + ': ' + object_name(object_id)
    from sys.foreign_keys 
    where referenced_object_id = @objid 
    order by 1

Die Antwort sieht wie folgt aus: test_db_name.dbo.Account: FK_Konto_Kunde

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X