繁体   English   中英

选择max(date)和表名作为列

[英]select the max(date) and table name as columns

我有很多桌子,例如:

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

我想要数据库中所有表(如'%names%'的updated_date和表名最大

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

怎么做 ..? 提前致谢

尝试这个 :-

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

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

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

SELECT MAX(updated_at_date)
FROM table1

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

动态创建一个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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM