2014-02-28 57 views
1

看來,我花了5-15分鐘的時間LEFT很多已加入表有FK到PK關係。SQL Server:外鍵到主鍵左連接程序

有沒有辦法創建一個過程來返回一個表,它留下連接所有通過外鍵連接到它的表?

Exec getFKJoin(Some_Table) 
  1. 查找表的外鍵

  2. 迭代通過每一個外鍵,並發現它的主鍵對應(other_table)

  3. Some_Table left join other_table on Some_Table.FK = other_table.PK

  4. 年底迭代

  5. Some_Table

什麼是實現這一目標的最佳方式是什麼?

+0

注意創造一個PK,默認情況下,創建了一個聚集索引,而改善了在PK中找到匹配(比方說在父表中)。但是在MS SQL中創建FK不會。所以FK列(比方說在子表中)沒有索引。要解決運行緩慢的查詢,您必須檢查實際執行計劃 – jean

回答

0

這說明你需要在每一步查詢,以便您可以構建它,它在存儲過程中自動錶:

--Look for foreign keys on TABLE 

SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS -- query 1 
WHERE constraint_type='FOREIGN KEY' 
AND TABLE_NAME='Some_table' 

SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE -- query 2 
WHERE constraint_name='Constraint_name_from_query_1' 


--Iterate through each foreign key and find it's primary key counterpart (other_table) 

SELECT UNIQUE_CONSTRAINT_NAME FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS -- query 3 
WHERE constraint_name='Constraint_name_from_query_1' 

SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE -- query 4 
WHERE constraint_name='Unique_constraint_from_query_3' 


-- Some_Table left join other_table on Some_Table.FK = other_table.PK 

select * from table_name_from_query_2 LEFT JOIN table_name_from_query_4 ON column_name_from_query_2 = column_name_from_query_4 
+0

謝謝!那是我需要的。 –