簡體   English   中英

SQL Feed查詢結果並入Union All語句

[英]SQL Feed Query results into Union All Statement

我有一個COTS應用程序數據庫,該數據庫每周都會按照特定的命名約定創建一個新表,並且始終包含相同的列。 我寫了一個查詢來選擇特定時間范圍內的表:

DECLARE @today VARCHAR(8)
SET @today = CONVERT(VARCHAR(8),GETDATE(),112)

DECLARE @monthold VARCHAR(8)
SET @monthold = CONVERT(VARCHAR(8),dateadd(day,-31,@today),112)

SELECT name
FROM sys.tables
WHERE name <= 'Event_Audit'+ @today AND name >= 'Event_Audit'+ @monthold 
AND name like 'Event_Audit%'
ORDER BY name DESC

現在,我正在尋找一種方法來讓查詢調用選擇用於匯總數據的每個表。 這將用於SSRS報告。

像這樣的東西,其中table1,table2等通過所有包含的表將被填充(無論是4、5或更多):

SELECT *
FROM table1
UNION ALL
SELECT *
FROM table2
UNION ALL
...
ORDER BY EVENT_DATE DESC

我無法創建視圖,新表或對現有表進行任何更改。

可憐的設計每次都會導致艱苦的工作,這一點也不例外。 我猜到現在放棄每個月一次又一次創建相同表的想法為時已晚。

您無需創建新表或臨時表即可執行sp_executeSql,只需生成sql腳本即可:

DECLARE  @today char(8) = CONVERT(char(8),GETDATE(),112),
         @monthold char(8) = CONVERT(char(8),dateadd(day,-31,GETDATE()),112),
         @sql nvarchar(max) = ''



SELECT @Sql = @Sql + ' UNION ALL SELECT * FROM ' + name
FROM sys.tables
WHERE name <= 'Event_Audit'+ @today AND name >= 'Event_Audit'+ @monthold 
AND name like 'Event_Audit%'
ORDER BY name DESC

SET @SQL = STUFF(@SQL, 1, 11, '') + -- remove the first UNION ALL
    ' ORDER BY EVENT_DATE DESC' -- add the ORDER BY

PRINT @Sql
--EXEC sp_executeSql @Sql

一旦打印完@Sql並檢查它正常,請取消標記EXEC行並運行腳本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM