2013-07-15 21 views
6

Chcę przynieść JEDEN klucz obcy z kilku z nich w tabeli. w interfejsie GUI w serwerze sql, jeśli rozszerzymy opcje tabeli, możemy zobaczyć folder o nazwie "Keys", w tym folderze znajduje się jeden klucz podstawowy i kilka obcych. W moim przykładzie mam trzy tabele, Klient, Zamówienia i Produkty. Klient ma Customer_ID jako primary, Items ma Item_ID jako primary, a Order ma Order_ID jako primary, foreign key Customer_nbr reference customer (Customer_ID) i foreign key item_nbr references Items (Item_ID).Jak znaleźć określony klucz obcy tabeli za pośrednictwem T-SQL?

więc w tym folderze „Keys” istnieją nazwy dla tych kluczy, takie jak: „FK_ Zamówienia _Customer__38996AB5”

problem jest, że liczba „38996AB5”, który następuje słowo klienta nie jest ustalona, ​​jeśli usuń ograniczenia, a następnie przywróć je, zostanie zmienione (ze względów bezpieczeństwa).

więc szukam polecenia SQL, które można wpisać w celu uzyskania tego klucza, niezależnie od tego, jak było. logicznie mógłbym użyć słowa kluczowego "LIKE" (tj. ... like = 'FK_ Orders _Customer __%'), ale nie mogłem wiedzieć, jak lub gdzie je umieścić.

z góry dzięki.

+1

To jest główny powód, dla którego polecam, abyś ** zawsze jawnie * nadawał sensowne nazwy ograniczeniom klucza obcego podczas ich tworzenia! –

+0

Zgadzam się z Markiem. Jawne nazwy powinny być nadawane podczas tworzenia z tego konkretnego powodu ............... jest to różnica między dba-101 i dba-301, IMHO. Mamy firmowy standard, że wszystkie nazwy obiektów muszą być jednoznaczne ... żadne z nazewnictwa microsoft auto-voodoo. – granadaCoder

Odpowiedz

3

Zastosowanie:

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

Oto kolejna wersja. Możesz filtrować według tabeli i tabeli nadrzędnej/nazwy kolumny, jak sądzę.

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 

lepszy pomysł:

imię Twój FK na temat stworzenia.

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