【发布时间】: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