2016-07-25 2 views
0

そのテーブルの読み込み日付をチェックする監査テーブルを作成しようとしています。基本的にはすべてのテーブルをSQLループし、特定の列から最大値を取得

は、私は、データベース内のすべてのテーブルをループにしたいと特定の列をチェック - 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 

など。

+0

を消費しますが、多数の例があります利用可能なそれぞれの。 –

答えて

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 '''[email protected]+''' 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 
0

おそらく、少しの動的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 
あなたはカーソルで動的SQLを結合する必要があります
関連する問題