选择max(日期)和表名作为列

时间:2013-04-16 07:25:12

标签: sql sql-server tsql

我有很多表格,如:

  1. A_names(updated_at date)
  2. B_names(updated_at date)
  3. C_names(updated_at date)
  4. 我想要数据库中'%names%'之类的所有表格的max_date和表名最多

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

    怎么做..?提前谢谢

4 个答案:

答案 0 :(得分:1)

试试这个: -

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

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

查看此文章The case against INFORMATION_SCHEMA views

答案 1 :(得分:0)

SELECT MAX(updated_at_date)
FROM table1

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

答案 2 :(得分: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

答案 3 :(得分:0)

Probabaly 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 + ')')**