2

我有很多表,例如:

  1. A_names (更新日期)
  2. B_names(更新日期)
  3. C_names(更新日期)

我想要'%names%'数据库中所有表的最大更新日期和表名

 select * into #temp1 
 from INFORMATION_SCHEMA.TABLES 
 WHERE TABLE_NAME  like '%names%'

怎么做 ..?提前致谢

4

4 回答 4

1

尝试这个 :-

 Select name ,modify_date from sys.tables
 where name like '%names'

并避免INFORMATION_SCHEMA.TABLES使用目录视图。

查看这篇文章反对 INFORMATION_SCHEMA 视图的案例

于 2013-04-16T07:36:55.940 回答
0

可能 Praveen 的答案是解决您的问题的方法,但使用伪代码

     DECLARE @SqlStmt NVARCHAR(2000)

     For Each TableName in 'Select name from sys.tables'
     {
        if @SqlStmnt <> '' @SqlStmnt = @SqlStmnt + ' UNION '

        @sqlStmnt = @sqlStmnt + ' SELECT Max(updated_at_date) AS MAXDATE FROM ' + TableName 
     }

     **EXECUTE ('SELECT MAX(MAXDATE) FROM (' + @SqlStmt + ')')**    
于 2013-04-16T07:51:45.323 回答
0
SELECT MAX(updated_at_date)
FROM table1

我对你的表名的描述有点困惑。无论如何,这是您选择最大日期的方式。

于 2013-04-16T07:34:00.600 回答
0

动态创建一条 SQL 语句,然后运行该命令。

DECLARE @dml nvarchar(max) = N''
SELECT @dml += ' UNION ALL SELECT ''' + name + ''' AS tableName, MAX(updated_at) AS maxUpdated_at FROM ' 
               + QUOTENAME(name)
FROM sys.tables 
WHERE name like '%names%'
PRINT @dml
SET @dml = STUFF(@dml, 1, 10, '')
EXEC sp_executesql @dml

不带 STUFF 功能的选项

DECLARE @dml nvarchar(max)
SELECT @dml = ISNULL(@dml + ' UNION ALL', '') + ' SELECT ''' + name + ''' AS tableName, MAX(updated_at) AS maxUpdated_at FROM ' 
              + QUOTENAME(name)
FROM sys.tables 
WHERE name like '%names%'
EXEC sp_executesql @dml
于 2013-04-16T07:48:07.157 回答