【问题标题】:GET MAX(ID) FOR ALL TABLES SQL SERVER获取所有表 SQL SERVER 的 MAX(ID)
【发布时间】:2013-09-09 21:40:43
【问题描述】:

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

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

【问题讨论】:

  • 你说的是最大Object_id吗?

标签: sql-server max information-schema


【解决方案1】:

您是否尝试获取数据库中每个 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;

【讨论】:

    【解决方案2】:
    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;
    

    【讨论】:

    • 我收到以下错误:操作数类型冲突:uniqueidentifier 与 bigint 不兼容
    猜你喜欢
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多