为所有表格SQL SERVER获取MAX(ID)

时间:2013-09-09 21:40:43

标签: sql-server max information-schema

我正在尝试为数据库中的所有表选择Max(ID)。我尝试了以下查询,但没有可用的AUTO-INCREMENT列。还有其他我可以试试的吗?

SELECT TABLE_NAME, AUTO_INCREMENT
FROM   information_schema.TABLES
WHERE  TABLE_SCHEMA = 'mydb'

2 个答案:

答案 0 :(得分:3)

您是否尝试获取数据库中每个IDENTITY列的最大值?可以通过修改前一个答案中的脚本来检查sys.columns表中的is_identity列。

 CREATE TABLE #x(t NVARCHAR(520), c BIGINT);

DECLARE @sql NVARCHAR(MAX);

SET @sql = N'';

SELECT @sql = @sql + N'INSERT #x SELECT ''' 
  + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ''',
  MAX(' + c.name + ') FROM '
  + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ';'

FROM sys.columns C
    INNER JOIN sys.tables T ON C.object_id = T.object_id
    INNER JOIN sys.schemas s ON S.schema_id = T.schema_id
WHERE is_identity = 1;

EXEC sp_executesql @sql;

SELECT t, c FROM #x;

DROP TABLE #x;

答案 1 :(得分:0)

CREATE TABLE #x(t NVARCHAR(520), c BIGINT);

DECLARE @sql NVARCHAR(MAX);

SET @sql = N'';

SELECT @sql = @sql + N'INSERT #x SELECT ''' 
  + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ''',
  MAX(ID) FROM '
  + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ';'
FROM sys.tables AS t
INNER JOIN sys.schemas AS s
ON t.[schema_id] = s.[schema_id]
INNER JOIN sys.columns AS c
ON t.[object_id] = c.[object_id]
WHERE c.name = N'ID';

EXEC sp_executesql @sql;

SELECT t, c FROM #x;

DROP TABLE #x;
相关问题