2013-07-15 10 views
6

voglio portare UNA chiave straniera da diversi in un tavolo. nell'interfaccia della GUI in SQL Server se espandiamo le opzioni della tabella possiamo vedere una cartella chiamata "Keys", in questa cartella c'è una chiave primaria e diverse estranee. Nel mio esempio ho tre tabelle, clienti, ordini e articoli. Cliente ha Customer_ID come primario, Articoli ha Item_ID come primario e Ordini ha Order_ID come primaria, chiave esterna Customer_nbr riferimenti cliente (Customer_ID) e chiave esterna item_nbr riferimenti Articoli (Item_ID).Come trovare una chiave esterna specifica di una tabella tramite T-SQL?

modo in quella cartella "chiavi" ci sono nomi per le chiavi del tipo: "FK_ Ordini _Customer__38996AB5"

il problema è che il numero "38996AB5" che segue la parola cliente non è fisso, se si eliminare i vincoli quindi ristabilirli sarà cambiato (per ragioni di sicurezza o così).

quindi sto cercando un comando SQL che può essere digitato al fine di ottenere quella chiave, non importa come fosse. logicamente potrei usare la parola chiave "LIKE" (ad esempio ... come = 'FK_ Orders _Customer __%') ma non potevo sapere come o dove metterlo.

grazie in anticipo.

+1

Questa è la ragione principale vi consiglio ** sempre esplicitamente * dare nomi significativi ai vostri vincoli di chiave esterna quando si crea loro! –

+0

Sono d'accordo con Marc. I nomi espliciti dovrebbero essere dati durante la creazione per questo motivo esatto ............... questa è la differenza tra dba-101 e dba-301, IMHO. Abbiamo uno standard aziendale secondo il quale tutti gli objectname devono essere espliciti ... nessuno dei nomi auto-voodoo di Microsoft. – granadaCoder

risposta

3

Usa:

SELECT * 
FROM sys.foreign_keys 
WHERE name LIKE '%yourForeignKeyName%' 
4

Ecco un'altra versione. È possibile filtrare per tabella e il nome parent-table/column indovinare.

SELECT 
    [ForeignKey] = f.name 
, [TableName] = OBJECT_NAME(f.parent_object_id), COL_NAME(fc.parent_object_id,fc.parent_column_id) 
, [ReferenceTableName] = OBJECT_NAME (f.referenced_object_id) 
, ReferenceColumnName = COL_NAME(fc.referenced_object_id, fc.referenced_column_id) 
FROM 
sys.foreign_keys AS f 
INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id 

migliore idea:

il nome della vostra FK di sulla creazione.

ALTER TABLE [dbo].ChildTable 
ADD CONSTRAINT ChildTableToParentTableFK /* A strong name */ 
    FOREIGN KEY (ParentTableKey) 
     REFERENCES [dbo].ParentTable (ParentTableKey ) 
GO 
Problemi correlati