【问题标题】:SQL Loop through all tables and get the max value from a specific columnSQL循环遍历所有表并从特定列中获取最大值
【发布时间】:2016-11-28 07:06:42
【问题描述】:

我正在尝试创建一个审核表来检查该表的加载日期。

基本上,我想遍历数据库中的所有表并检查特定列 - LoadedDate 并为每个表返回该列的最大值

SELECT TABLE_NAME
INTO #TableList 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE column_name = 'LoadedDate'


SELECT MAX(LoadedDate) FROM @TableName -- I guess using a cursor to loop through #TableList

在结果表中

TableName     LoadedDate  
Table 1       2016-06-01
Table 2       2016-07-01
Table 3       2016-06-01

等等。

【问题讨论】:

  • 您需要将动态 sql 与游标结合起来,每个都有很多示例。

标签: sql loops cursor sql-server-2014


【解决方案1】:

你可以试试这段代码,但是会消耗一些时间

SELECT TABLE_NAME,TABLE_SCHEMA
INTO #TableList 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE column_name = 'LoadedDate'

CREATE TABLE #TempResult (TableName VARCHAR(100), MaxDate DATETIME2)

DECLARE @TableName      VARCHAR(100)
        ,@TableSchema   VARCHAR(100)
DECLARE @SqlQuery   NVARCHAR(MAX)

WHILE(EXISTS(SELECT TOP(1) * FROM #TableList))
BEGIN
    SELECT TOP(1) @TableName = TABLE_NAME, @TableSchema = TABLE_SCHEMA FROM #TableList
    DELETE #TableList WHERE TABLE_NAME = @TableName

    SET @TableName = @TableSchema +'.'+ @TableName
    SET @SqlQuery = 'SELECT '''+@TableName+''' AS ''TableName'', MAX(UpdatedDate) AS MaxDate FROM '+ @TableName
    INSERT INTO #TempResult
    EXECUTE sp_executesql @SqlQuery
END


SELECT * from #TempResult

DROP TABLE #TableList
DROP TABLE #TempResult

【讨论】:

    【解决方案2】:

    也许是一点动态 SQL

    Select Table_Name = cast('' as varchar(150))
          ,LoadedDate = GetDate() 
     Into  #TableList 
     Where 1=0
    
    Declare @SQL varchar(max) = '>>>'
    
    Select @SQL = @SQL + SQL
     From (
            Select Table_Name,SQL='Union All Select Table_Name='''+Table_Name+''',LoadedDate=max(LoadedDate) From ['+Table_Name+'] '
             From  INFORMATION_SCHEMA.COLUMNS
             Where column_name Like '%UTC%'  --= 'LoadedDate'
          ) A
    
    Set @SQL = Replace(@SQL,'>>>Union All','Insert Into #TableList ')
    Exec(@SQL)
    
    Select * from #TempResult
    

    【讨论】:

      猜你喜欢
      • 2018-05-03
      • 2019-12-21
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多