![](/img/trans.png)
[英]Using 'AS' Statement in MS QUERY SQL with '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.