我试图创建一个审核表来检查该表的加载日期。
基本上,我想遍历数据库中的所有表并检查特定列 - 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 '''+@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
答案 1 :(得分: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