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을 결합해야합니다
관련 문제