Tsql 返回表集合中的下一个可用主键

Tsql 返回表集合中的下一个可用主键,tsql,cursor,report,Tsql,Cursor,Report,我正在根据一系列已知表及其主键构建报告,例如: BOOKS.bookid AUTHORS.authorid GENRE.genreid 我想做的是构建一个t-sql报告,它只显示表、主键和下一个可用主键,例如: **tabl_name prim_key avail_key** BOOKS BOOKID 281 AUTHORS AUTHORID 29 GENRE

我正在根据一系列已知表及其主键构建报告,例如:

BOOKS.bookid

AUTHORS.authorid

GENRE.genreid
我想做的是构建一个t-sql报告,它只显示表、主键和下一个可用主键,例如:

**tabl_name       prim_key        avail_key**

BOOKS             BOOKID          281

AUTHORS           AUTHORID        29

GENRE             GENREID         18
通过使用information_模式,我已经有了表名及其PK,但不知何故,将其与实际表连接起来以派生其下一个可用PK是很难实现的。我猜有一种使用游标的动态sql解决方案,但这会让我的sql技能发挥到极致。

试试这个:

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 '
顺便说一句,以上大部分都来自这个答案:


谢谢:查询返回的当前标识字段为空。此操作是否具有特殊权限?
ident_current()
返回具有identity属性的列的下一个值(换句话说,SQL Server将自动生成下一个值)。对于PK不是identity的表,
ident_current()
将返回null,但这应该不是问题,因为您(而不是SQL Server)控制将插入到这些表中的下一个PK值;再次感谢。