2013-05-31 27 views
0

需要填充DataSet與數據庫中的所有表和每個數據表中必須有下列列不能返回模式表包括PKS和FK

  • 表名
  • 的ColumnName
  • ISNULLABLE,
  • DataType
  • MaxLength
  • IsprimaryKey
  • IsForeignKey

我做了以下但不這樣做給我嘗試添加一個關節primarykeys和foreignkeys

SELECT * 
FROM INFORMATION_SCHEMA.COLUMNS C  
WHERE C.TABLE_SCHEMA='dbo' 
ORDER BY C.TABLE_NAME 

,但我得到錯誤的結果

SELECT C.TABLE_SCHEMA, 
    C.TABLE_NAME, 
    C.COLUMN_NAME, 
    C.IS_NULLABLE, 
    C.DATA_TYPE, 
    C.CHARACTER_MAXIMUM_LENGTH, 
    TC.CONSTRAINT_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS C 
    INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC 
     ON c.TABLE_NAME=TC.TABLE_NAME 
WHERE C.TABLE_SCHEMA='dbo' 
ORDER BY C.TABLE_NAME 

我如何返回上面關於表的所有信息,包括if是否是外鍵的主鍵?

非常感謝

+0

我運行了相同的**'Query' **,我沒有找到**'Error' **。你究竟得不到什麼? – Luv

回答

0

如果我給你正確的,那麼:

1.You需要做LEFT join INFORMATION_SCHEMA.TABLE_CONSTRAINTS

2.Put的case

嘗試下面的查詢,讓我知道,如果我對不對?

SELECT 
Distinct 
C.TABLE_SCHEMA, 
C.TABLE_NAME, 
C.COLUMN_NAME, 
C.IS_NULLABLE, 
C.DATA_TYPE, 
C.CHARACTER_MAXIMUM_LENGTH, 
CASE WHEN TC.CONSTRAINT_TYPE='PRIMARY KEY' THEN 'Yes' Else 'No' end as ISprimaryKey, 
CASE WHEN TC.CONSTRAINT_TYPE='FOREIGN KEY' THEN 'Yes' Else 'No' end as IsForeignKey 
FROM INFORMATION_SCHEMA.COLUMNS C with(nolock) 
LEFT join INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC with(nolock) on c.TABLE_NAME=TC.TABLE_NAME 
WHERE C.TABLE_SCHEMA='dbo' 
ORDER BY C.TABLE_NAME 
+0

嗨,感謝您的回覆,但是我得到了超過兩倍的行,但任何想法 – user9969

+0

只需添加**'不同** ** – Luv

+0

嗨感謝您的時間仍然得到雙列,這似乎是由「的情況下「試圖組合,但似乎無法按組合的情況。再次感謝 – user9969