2013-07-15 1 views
6

Я хочу принести ОДИН иностранный ключ из нескольких в таблице. в интерфейсе GUI в sql-сервере, если мы расширим параметры таблицы, мы увидим папку под названием «Ключи», в этой папке есть один первичный ключ и несколько иностранных. В моем примере у меня есть три таблицы, Клиент, Заказы и Элементы. Клиент имеет идентификатор Customer_ID как первичный, Элементы имеют Item_ID как первичный, а Orders имеет Order_ID как первичный, внешний ключ Customer_nbr ссылается на клиент (Customer_ID) и внешний ключ item_nbr ссылки Items (Item_ID).Как найти определенный внешний ключ таблицы через T-SQL?

так в этой папке «Ключи» Есть имена для этих ключей, как: «FK_ Заказов _Customer__38996AB5»

проблемы в том, что число «38996AB5», который следует за словом клиента не является фиксированным, если вы удалите ограничения, затем восстановите их, они будут изменены (по соображениям безопасности или около того).

поэтому я ищу команду SQL, которую можно ввести, чтобы получить этот ключ независимо от того, что это было. логически я мог бы использовать ключевое слово «LIKE» (то есть ... like = 'FK_ Заказы _Customer __%'), но я не мог знать, как и где его можно поместить.

благодарит заранее.

+1

Это основная причина, по которой я рекомендую вам ** всегда явно * давать значимые имена вашим ограничениям внешнего ключа при их создании! –

+0

Я согласен с Марком. Явные имена следует указывать при создании по этой точной причине ................ Это разница между dba-101 и dba-301, IMHO. У нас есть стандарт компании, что все objectnames должны быть явными ... ни одно из имен auto-voodoo microsoft. – granadaCoder

ответ

3

Использование:

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

Вот еще одна версия. Я думаю, вы можете фильтровать по таблице, а родительский стол/имя столбца.

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 

ЛУЧШИЙ IDEA:

Имя ваши FK по созданию.

ALTER TABLE [dbo].ChildTable 
ADD CONSTRAINT ChildTableToParentTableFK /* A strong name */ 
    FOREIGN KEY (ParentTableKey) 
     REFERENCES [dbo].ParentTable (ParentTableKey ) 
GO 
Смежные вопросы