我有很多表,例如:
A_names
(更新日期)B_names
(更新日期)C_names
(更新日期)
我想要'%names%'
数据库中所有表的最大更新日期和表名
select * into #temp1
from INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME like '%names%'
怎么做 ..?提前致谢
我有很多表,例如:
A_names
(更新日期)B_names
(更新日期)C_names
(更新日期)我想要'%names%'
数据库中所有表的最大更新日期和表名
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
使用目录视图。
可能 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 + ')')**
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