2013-10-23 33 views
-1

我從一系列已知的表和他們的主鍵,例如創建報表的收集:返回下一個可用PK表

BOOKS.bookid 

AUTHORS.authorid 

GENRE.genreid 

我想這樣做的是建立一個T-SQL報告只顯示該表中,主鍵,和下一個可用的PK,如:

**tabl_name  prim_key  avail_key** 

BOOKS    BOOKID   281 

AUTHORS   AUTHORID  29 

GENRE    GENREID   18 

我已經有表名和使用INFORMATION_SCHEMA,但不知何故,加入了PK與實際的表推導出下一個可用的PK就是證明usive。我猜是有一些動態的SQL與遊標解決方案,但這是最大的我的SQL技能了。

回答

0

試試這個:

SELECT Col.TABLE_NAME, Col.Column_Name, ident_current(Col.TABLE_NAME) from 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS Tab, 
    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col 
WHERE 
    Col.Constraint_Name = Tab.Constraint_Name 
    AND Col.Table_Name = Tab.Table_Name 
    AND Constraint_Type = 'PRIMARY KEY ' 

順便說一句,上述大部分來自這個答案:

https://stackoverflow.com/a/96049/37613

+0

感謝acfrancis:查詢爲IDENT_CURRENT場返回null。是否有特殊的權限讓這個工作? –

+0

''ident_current()''返回具有標識屬性的列的下一個值(換句話說,SQL Server自動生成下一個值)。對於PK不是identity的表,「ident_current()」將返回null,但這不應該成爲一個問題,因爲您(而不是SQL Server)控制將插入到這些表中的下一個PK值。 – acfrancis

+0

我會給你一個答案,但我沒有足夠的代表;再次感謝。 –