【问题标题】:combine data from dynamic table in sql server 2019在sql server 2019中合并来自动态表的数据
【发布时间】:2023-02-06 11:47:06
【问题描述】:

我有多个表超过 500(可能更多,我们正在动态创建)具有相同的架构。 表->“CreateOrderRequestPending_TD001_%”。

有没有最快的方法从所有表中获取数据???

我正在尝试这样做......

    DECLARE @SQL NVARCHAR(MAX)='';
    DECLARE @TblName NVARCHAR(MAX);
    DECLARE @I INT=0;
    DECLARE Tbl_Cursor CURSOR FOR
      SELECT TABLE_NAME
      FROM INFORMATION_SCHEMA.TABLES
      WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG='z_scope' 
      AND TABLE_NAME LIKE 'CreateOrderRequestPending_TD001_%'
     

   OPEN Tbl_Cursor
   FETCH NEXT FROM Tbl_Cursor INTO @TblName
   WHILE @@FETCH_STATUS = 0
   BEGIN   
   IF @I>0 
   SET @SQL+=' UNION ALL ';
 

  SET @SQL+=' SELECT * FROM  ' +@TblName+ ' '
 -- This query is more complex (having join with master table)

 SET @I=@I+1;
  FETCH NEXT FROM Tbl_Cursor INTO @TblName

 END
 CLOSE Tbl_Cursor;
 DEALLOCATE Tbl_Cursor;  
 EXEC(@SQL);

【问题讨论】:

  • 在技​​术意义上,您的动态 SQL 可能需要在每个表的 SELECT 语句之间有一个 UNION ALL - 然后您将获得一个数据集中所有表的结果。但是,我不禁想到您可能应该重新考虑您已经实施的解决方案,这需要创建 100 个动态表名(特别是如果它们的模式都相同)。你不能用一个表和一个标识数据的相关 KEY 字段来实现你想要的结果吗(就像你的多个表可能正在做的那样)?

标签: sql sql-server-2019


【解决方案1】:

问题

DROP VIEW COMBINED;
CREATE VIEW AS SELECT * FROM ... UNION ALL  SELECT * FROM ...

动态生成组成表列表的位置。

然后查询视图。

【讨论】:

  • 创建新表后我该怎么办。再次改变观点??
猜你喜欢
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 2023-03-24
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多