2013-10-23 32 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

我会给你一个答案,但我没有足够的代表;再次感谢。 –