用标识列标识所有表

use*_*632 0 sql-server identity sql-server-2014

是否有我可以运行的查询来显示所有带有标识列的表?试图找出是否有任何基于身份的表,其当前身份接近 int32 或 int64 的上限。

AMt*_*two 7

上有一列sys.columns用于标识身份列 ( is_identity)。

此外,IDENT_CURRENT()您可以使用一个函数来识别最近生成的表标识值,以确定您是否正在接近 int 最大值。(文档

您可以通过执行以下操作来简单地查询它以标识具有标识列的每个表(以及标识列是什么):

SELECT 
    TableName       = o.name,
    ColumnName      = c.name,
    IdentityCurrent = IDENT_CURRENT( o.name ) ,
    TypeName        = t.name
FROM sys.objects AS o
JOIN sys.columns AS c
    ON c.object_id = o.object_id
    AND c.is_identity = 1
JOIN sys.types AS t
    ON t.system_type_id = c.system_type_id
WHERE o.type = 'U'; --User tables
Run Code Online (Sandbox Code Playgroud)

您可以添加到该WHERE子句中以添加其他条件,以仅捕获距离太近而无法舒适的表,作为生成警报的基础。