【问题标题】:Get data from tables that I have from another query从我从另一个查询中获得的表中获取数据
【发布时间】:2022-09-23 00:06:16
【问题描述】:

我正在尝试从另一个查询中获取的所有表中获取数据,如下所示:

DECLARE @count int
SET @count = (SELECT COUNT(*) FROM (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE \'%Project%\') AS SUBQUERY)
WHILE(@count!=0)
    BEGIN
    SELECT * from (SELECT TABLE_NAME from (SELECT TABLE_NAME,
ROW_NUMBER() over (order by table_name) as row_number
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE \'%Project%\') as sub
WHERE row_number = @count) as another_sub;
    SET @count = @count-1
    end

我现在得到的是 5 个表名,如 \'%Project%\'。我想从所有这 5 个表中获取数据,而不仅仅是它们的名称。我也不想加入或联合这些表。我怎样才能做到这一点?

  • 我假设每个表之间的架构是相同的?看起来您想合并任何名称为 \"%Project%\" 的表中的结果?
  • 如果您考虑到不同的列名称及其各自的数据类型,您可以将它们一起UNION。我假设你想要一个结果集?
  • 我需要每张桌子单独的结果。这些表中的每一个之间的架构都是相同的。
  • 那你为什么不写单独的选择语句呢?我不明白这个问题。
  • 我为通过 while 循环获得的每个表名编写了单独的选择语句。但现在结果我只得到 5 个表名,而不是它们的数据。我需要这些表中的数据。

标签: sql sql-server


【解决方案1】:
DECLARE @SQL varchar(max) = '';

SELECT @SQL = @SQL + 'SELECT * FROM ' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) + ';' + CHAR(13) + CHAR(10)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '%Project%';

print @SQL;
--EXEC(@SQL);

【讨论】:

  • 它正在工作。非常感谢!! :)
猜你喜欢
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
相关资源
最近更新 更多