Sql server 如何查找数据库中的所有主键及其标识和种子值?

Sql server 如何查找数据库中的所有主键及其标识和种子值?,sql-server,tsql,sql-server-2012,Sql Server,Tsql,Sql Server 2012,以下查询返回所有数据库主键和其他列的列表 SELECT * FROM sysobjects AS s WHERE xtype='pk' 上述附加列均与主键的标识、种子值、增量值等无关 我应该使用什么查询,或者如何查找数据库中的所有主键及其标识和种子值 更新 (现在使用identity\u列表而不是IDENT\u…函数) 已更新 (现在使用identity\u列表而不是IDENT\u…函数) 下面是一个备选答案b/c I组合选择并添加用于排序的创建和修改日期以及架构之间可能重复的架构

以下查询返回所有数据库主键和其他列的列表

SELECT  *
FROM    sysobjects AS s
WHERE   xtype='pk'
上述附加列均与主键的标识、种子值、增量值等无关


我应该使用什么查询,或者如何查找数据库中的所有主键及其标识和种子值

更新

(现在使用
identity\u列
表而不是
IDENT\u…
函数)


已更新

(现在使用
identity\u列
表而不是
IDENT\u…
函数)


下面是一个备选答案b/c I组合选择并添加用于排序的创建和修改日期以及架构之间可能重复的架构名称b/c键名称是唯一的:

SELECT  schema_name = ( SELECT top 1 pk.CONSTRAINT_SCHEMA FROM information_schema.table_constraints pk INNER JOIN information_schema.key_column_usage c ON c.TABLE_NAME = pk.TABLE_NAME WHERE pk.CONSTRAINT_NAME like '%' + i.name + '%')
        ,object_name(i.object_id) tableName, i.name indexName, c.name columnName, c.is_identity 
        ,ident_seed(object_name(i.object_id)) seed
        ,ident_incr(object_name(i.object_id)) increment
        ,ident_current(object_name(i.object_id)) lastAssignedId
        ,CreateDate = ( SELECT s.crdate FROM sysobjects s INNER JOIN (SELECT COUNT(1) cnt, xtype FROM sysobjects group by xtype) c ON  s.xtype = c.xtype WHERE s.name = i.name)
        ,ModifiedDate = (SELECT s.refdate FROM sysobjects s INNER JOIN (SELECT COUNT(1) cnt, xtype FROM sysobjects group by xtype) c on  s.xtype = c.xtype WHERE s.name = i.name)
FROM    sys.indexes i
    INNER JOIN sys.index_columns ic ON ic.object_id = i.object_id AND ic.index_id = i.index_id
    INNER JOIN sys.columns c ON c.object_id = ic.object_id AND c.column_id = ic.column_id
WHERE   i.is_primary_key = 1 
ORDER BY    ModifiedDate, CreateDate DESC

下面是一个备选答案b/c I组合选择并添加用于排序的创建和修改日期以及架构之间可能重复的架构名称b/c键名称是唯一的:

SELECT  schema_name = ( SELECT top 1 pk.CONSTRAINT_SCHEMA FROM information_schema.table_constraints pk INNER JOIN information_schema.key_column_usage c ON c.TABLE_NAME = pk.TABLE_NAME WHERE pk.CONSTRAINT_NAME like '%' + i.name + '%')
        ,object_name(i.object_id) tableName, i.name indexName, c.name columnName, c.is_identity 
        ,ident_seed(object_name(i.object_id)) seed
        ,ident_incr(object_name(i.object_id)) increment
        ,ident_current(object_name(i.object_id)) lastAssignedId
        ,CreateDate = ( SELECT s.crdate FROM sysobjects s INNER JOIN (SELECT COUNT(1) cnt, xtype FROM sysobjects group by xtype) c ON  s.xtype = c.xtype WHERE s.name = i.name)
        ,ModifiedDate = (SELECT s.refdate FROM sysobjects s INNER JOIN (SELECT COUNT(1) cnt, xtype FROM sysobjects group by xtype) c on  s.xtype = c.xtype WHERE s.name = i.name)
FROM    sys.indexes i
    INNER JOIN sys.index_columns ic ON ic.object_id = i.object_id AND ic.index_id = i.index_id
    INNER JOIN sys.columns c ON c.object_id = ic.object_id AND c.column_id = ic.column_id
WHERE   i.is_primary_key = 1 
ORDER BY    ModifiedDate, CreateDate DESC

有没有办法找到pk更改时的时间(如crdate或refdate)或列名更改时的时间?到目前为止,我找不到任何东西-可能值得在dba.stackexchange.com上询问,因为这些人对这类领域了解得更多。您可以随时编写自定义代码来审核这些事情。此外,如果您有事务日志,我想在其中查找此类信息是可能的(尽管可能很痛苦)?为什么这三个
ident\u
功能在
sys.identity\u列中都可用?将名称传递给这些函数的挑战是,如果在不同的模式中有两个同名的表,那么这些函数可能会返回意外的结果;我不熟悉那张桌子。正在更新。有没有办法找到pk更改时的时间(如crdate或refdate)或列名更改时的时间?到目前为止,我找不到任何东西-可能值得在dba.stackexchange.com上询问,因为这些人对这类领域了解得更多。您可以随时编写自定义代码来审核这些事情。此外,如果您有事务日志,我想在其中查找此类信息是可能的(尽管可能很痛苦)?为什么这三个
ident\u
功能在
sys.identity\u列中都可用?将名称传递给这些函数的挑战是,如果在不同的模式中有两个同名的表,那么这些函数可能会返回意外的结果;我不熟悉那张桌子。正在更新。