2011-09-07 95 views
4

SQL Server Mgmt Studio 2005:有人可以幫助我瞭解如何查看和打印表之間的關係,同時顯示錶中的列。我很多年前就做過這個事情,並且一直在努力掙扎幾天才能再做一次。SQL Server表關係

+0

聽起來像是你需要添加一個數據庫圖表,但你是什麼意思「表中的變量。」 –

回答

7

右鍵單擊數據庫名稱,展開「數據庫關係圖」並選擇:「新建數據庫關係圖」。

+1

+1 @ user745778 - 請注意,這不僅僅是一張圖片。對圖表所做的更改和保存將保留回數據庫。吸引了很多人蔘加IME。 –

0

您可以創建數據庫圖並將所有表添加到它。這將是一個圖形表示,如果這是你想要的。

3

您需要創建和編輯數據庫圖表,請參閱本Getting started with SQL Server database diagrams和/或Designing Database Diagrams

您可以查詢做得一樣好:SQL SERVER – Query to Display Foreign Key Relationships and Name of the Constraint for Each Table in Database

這裏是一個查詢,將得到的PK;檢查約束和FKS,並從@tablename,多列約束在一個逗號分隔的列表:

DECLARE @TableName varchar(250) 
SET @TableName='YourTable' 
;WITH AllInfo AS 
(
SELECT 
    tc.TABLE_NAME,tc.CONSTRAINT_NAME, ccu.COLUMN_NAME 
    FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS     tc 
     INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu ON ccu.TABLE_NAME = tc.TABLE_NAME AND ccu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME 
    WHERE tc.TABLE_NAME [email protected] 
UNION 
SELECT 
    FK.TABLE_NAME,C.CONSTRAINT_NAME,CU.COLUMN_NAME 
    FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS  C 
     INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME 
     INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME 
     INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME 
     INNER JOIN (SELECT i1.TABLE_NAME, i2.COLUMN_NAME 
         FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS   i1 
          INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME 
          WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY' 
        ) PT ON PT.TABLE_NAME = PK.TABLE_NAME 
     WHERE [email protected] 
) 
SELECT DISTINCT 
    t1.TABLE_NAME,t1.CONSTRAINT_NAME 
     ,STUFF(
        (SELECT 
         ', ' + t2.COLUMN_NAME 
         FROM AllInfo t2 
         WHERE t1.TABLE_NAME=t2.TABLE_NAME AND t1.CONSTRAINT_NAME=t2.CONSTRAINT_NAME 
         ORDER BY t2.COLUMN_NAME 
         FOR XML PATH(''), TYPE 
        ).value('.','varchar(max)') 
        ,1,2, '' 
      ) AS ColumnNames 
    FROM AllInfo t1 
    ORDER BY 1,2,3