2013-07-15 34 views
6

tôi muốn mang MỘT khóa ngoại từ một vài cái trong một cái bàn. trong giao diện GUI trong máy chủ sql nếu chúng ta mở rộng các tùy chọn bảng, chúng ta có thể thấy một thư mục có tên là "Keys", trong thư mục này có một khóa chính và một số khóa ngoại. Trong ví dụ của tôi, tôi có ba bảng, Khách hàng, Đơn đặt hàng và Mục. Khách hàng có Customer_ID là primary, Item có Item_ID là primary và Orders có Order_ID là primary, key ngoài Customer_nbr references customer (Customer_ID) và Foreign key item_nbr references Items (Item_ID).Làm thế nào để tìm một Khóa Ngoại của một bảng thông qua T-SQL?

như vậy trong đó "Keys" thư mục có tên những chiếc chìa khóa như: "FK_ Orders _Customer__38996AB5"

vấn đề được rằng số lượng "38996AB5" rằng sau từ khách hàng chưa được khắc phục, nếu bạn xóa các ràng buộc sau đó thiết lập lại chúng, nó sẽ bị thay đổi (vì lý do bảo mật hay như vậy).

vì vậy tôi đang tìm lệnh SQL có thể được nhập để nhận khóa đó bất kể nó như thế nào. về mặt logic, tôi có thể sử dụng từ khóa "LIKE" (ví dụ: ... like = 'FK_ Đơn đặt hàng _Khách hàng __%') nhưng tôi không thể biết cách đặt hoặc đặt ở đâu.

cảm ơn trước.

+1

Đó là lý do chính tôi khuyên bạn nên ** luôn rõ ràng * đặt tên có ý nghĩa cho các ràng buộc khóa ngoại của bạn khi bạn tạo chúng! –

+0

Tôi đồng ý với Marc. Tên rõ ràng nên được đưa ra trong quá trình tạo vì lý do chính xác này ............... đây là sự khác biệt giữa dba-101 và dba-301, IMHO. Chúng tôi có một tiêu chuẩn của công ty rằng tất cả các tên đối tượng phải rõ ràng ... không có tên nào trong số các tên gọi tự động voodoo của microsoft. – granadaCoder

Trả lời

3

Sử dụng:

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

Đây là phiên bản khác. Bạn có thể lọc theo bảng và bảng mẹ/tên cột tôi đoán.

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 TỐT HƠN:

Tên bạn của FK về sáng tạo.

ALTER TABLE [dbo].ChildTable 
ADD CONSTRAINT ChildTableToParentTableFK /* A strong name */ 
    FOREIGN KEY (ParentTableKey) 
     REFERENCES [dbo].ParentTable (ParentTableKey ) 
GO 
Các vấn đề liên quan