Sql 我需要一个想法来打印150个表中存在的特定列的值。
我想找到150个表的最大日期值。我不想为这150个表中的每一个单独编写sql。有没有办法将所有150个表放入一个查询并打印150个最大日期值?谢谢 您可以对150个表进行并集,并获得最大日期值。但是,避免手动输入所有150个表的唯一方法是使用动态sql。您可以对150个表进行并集,并获得最大日期值。但是,避免手动输入所有150个表的唯一方法是使用动态sqlSql 我需要一个想法来打印150个表中存在的特定列的值。,sql,sql-server,Sql,Sql Server,我想找到150个表的最大日期值。我不想为这150个表中的每一个单独编写sql。有没有办法将所有150个表放入一个查询并打印150个最大日期值?谢谢 您可以对150个表进行并集,并获得最大日期值。但是,避免手动输入所有150个表的唯一方法是使用动态sql。您可以对150个表进行并集,并获得最大日期值。但是,避免手动输入所有150个表的唯一方法是使用动态sql select max(maxd) from ( Select max(date_column) as maxd from table
select max(maxd) from (
Select max(date_column) as maxd from table1
union
Select max(date_column) as maxd from table2
union
....
) t
这里有一条路
select max(maxd) from (
Select max(date_column) as maxd from table1
union
Select max(date_column) as maxd from table2
union
....
) t
手动合并所有表是绝对不可能的。诀窍是使用动态SQL。 说你的表名是表1到表150
Declare @SQL nvarchar(max);
DECLARE @n int = 1;
WHILE (@n <= 150)
BEGIN
SET @SQL = 'SELECT MAX(Date_col) as Max FROM TABLE' + convert(nvarchar(3),@n) + ' UNION '
SET @n += 1
END
SET @SQL = LEFT(@SQL,LEN(@SQL) -6) --Removes the last 'UNION '
EXEC @SQL
Declare@SQL-nvarchar(最大值);
声明@n int=1;
而(@n完全不可能手动合并所有表。诀窍是使用动态SQL。
说你的表名是表1到表150
Declare @SQL nvarchar(max);
DECLARE @n int = 1;
WHILE (@n <= 150)
BEGIN
SET @SQL = 'SELECT MAX(Date_col) as Max FROM TABLE' + convert(nvarchar(3),@n) + ' UNION '
SET @n += 1
END
SET @SQL = LEFT(@SQL,LEN(@SQL) -6) --Removes the last 'UNION '
EXEC @SQL
Declare@SQL-nvarchar(最大值);
声明@n int=1;
而(@n可能有一点动态SQL
很明显,您可以根据自己的需要编辑位置
Declare @SQL varchar(max) ='>>>'
Select @SQL = @SQL +' Union All Select Source ='''+QuoteName(TABLE_SCHEMA)+'.'
+QuoteName(TABLE_NAME)+''',FieldName='''+QuoteName(COLUMN_NAME)+''',Value=max('
+QuoteName(COLUMN_NAME)+') From '
+QuoteName(TABLE_SCHEMA)+'.'+QuoteName(TABLE_NAME)
From INFORMATION_SCHEMA.COLUMNS
Where COLUMN_NAME Like '%UTC%'
and DATA_TYPE in ('date','datetime')
Select @SQL=replace(@SQL,'>>> Union All','')
Exec(@SQL)
例如返回
Source FieldName Value
[dbo].[OD] [OD-LM-UTC] 2016-11-03 20:28:09.987
[dbo].[zzz-OD_XP] [XP_LM_UTC] 2016-07-22 22:53:37.113
[dbo].[zzz-OD_OH_Archive] [OH_LM_UTC] 2016-01-22 15:07:39.077
[dbo].[OD-XP] [XP-LM-UTC] 2016-11-03 21:28:28.113
[dbo].[USPS-Full] [LM_UTC] 2016-07-20 15:03:53.600
也许需要一点动态SQL
很明显,您可以根据自己的需要编辑位置
Declare @SQL varchar(max) ='>>>'
Select @SQL = @SQL +' Union All Select Source ='''+QuoteName(TABLE_SCHEMA)+'.'
+QuoteName(TABLE_NAME)+''',FieldName='''+QuoteName(COLUMN_NAME)+''',Value=max('
+QuoteName(COLUMN_NAME)+') From '
+QuoteName(TABLE_SCHEMA)+'.'+QuoteName(TABLE_NAME)
From INFORMATION_SCHEMA.COLUMNS
Where COLUMN_NAME Like '%UTC%'
and DATA_TYPE in ('date','datetime')
Select @SQL=replace(@SQL,'>>> Union All','')
Exec(@SQL)
例如返回
Source FieldName Value
[dbo].[OD] [OD-LM-UTC] 2016-11-03 20:28:09.987
[dbo].[zzz-OD_XP] [XP_LM_UTC] 2016-07-22 22:53:37.113
[dbo].[zzz-OD_OH_Archive] [OH_LM_UTC] 2016-01-22 15:07:39.077
[dbo].[OD-XP] [XP-LM-UTC] 2016-11-03 21:28:28.113
[dbo].[USPS-Full] [LM_UTC] 2016-07-20 15:03:53.600
声明@Sql NVARCHAR(max)、@maxid INT、@minid INT、@Runquery VARCHAR(500)
声明@Maxdatefind表(ID INT IDENTITY,Slcmd VARCHAR(max))
SET@Sql='1!'
挑选
''从'+QUOTENAME(表模式)+''中选择最大值(''+列名称+'')作为'+''最大值'+''+列名称+'''''.''''.'+
“输入数据的信息”SCHEMA.COLUMNS(“日期时间”和“日期”)中的QUOTENAME(表名)
'
打印@sql
插入@Maxdatefind(Slcmd)
EXEC(@Sql)
从@Maxdatefind中选择@maxid=max(id),@minid=min(id)
而(@minidDECLARE@Sql-NVARCHAR(max)、@maxid-INT、@minid-INT、@Runquery-VARCHAR(500)
声明@Maxdatefind表(ID INT IDENTITY,Slcmd VARCHAR(max))
SET@Sql='1!'
挑选
''从'+QUOTENAME(表模式)+''中选择最大值(''+列名称+'')作为'+''最大值'+''+列名称+'''''.''''.'+
“输入数据的信息”SCHEMA.COLUMNS(“日期时间”和“日期”)中的QUOTENAME(表名)
'
打印@sql
插入@Maxdatefind(Slcmd)
EXEC(@Sql)
从@Maxdatefind中选择@maxid=max(id),@minid=min(id)
虽然(@minid-So,你在150个不同的表中有日期类型的字段吗?是的,没错。你能提供一些详细信息,让我们知道你想做什么。似乎大多数人认为你想要一个结果,但你的问题表明每个表可能有一行。所有表的列名都一致吗?那么,你有f吗在150个不同的表中输入日期的字段?是的,没错。你能提供一些详细信息,让我们知道你想做什么。似乎大多数人认为你想要一个结果,但你的问题表明每个表可能只有一行。所有表的列名是否一致?如果它们是一致的,我想你注定要失败像这样的名字我建议使用计数表而不是循环,但在这么少的迭代中不会有任何明显的区别。@SeanLange,我只是用谷歌搜索了一下,它看起来很整洁,我很高兴你发表了评论!这是一篇关于这个主题的优秀文章。这篇文章被称为“t-sql的瑞士军刀”因为它是如此的通用。我想你注定要失败了。如果它们是像这样的统一名称,我建议使用计数表而不是循环,但在这么少的迭代中不会产生任何明显的变化。@SeanLange,我只是在谷歌上搜索了它是什么,它看起来如此整洁,我很高兴你发表了评论!这是一篇关于这个主题的优秀文章。这篇文章是r埃菲尔被誉为“t-sql的瑞士军刀”,因为它用途广泛。