2013-07-30 41 views
2

我們有存儲在一個名爲「ACManager」和表數據庫中記錄數據的應用程序名爲「Events_1」表。需要查詢的是動態創建

當此表獲取一定數量的記錄軟件創建了一個名爲「Events_2」另一個表。這隨着數據的增長而繼續。我需要能夠自動查詢這些數據,就好像它全部在一張表中一樣沒有干擾。當應用程序動態創建新表時,使用UNION將最終創建無效查詢。請考慮性能。

所以我們需要查詢作爲一個表,而UNION:

Select * 
FROM ACManager.Events_1 , ACManager.Events_2 , ACManager.Events_xxxx(as needed) 

回答

0

使用動態SQL。試試這個

DECLARE @query VARCHAR(MAX) 
SET @query='Select * 
FROM SELECT STUFF((SELECT '','' + name 
     from sys.tables where name like ''Events%'' 
     FOR XML PATH('''')), 1, 1, '''') ' 

EXEC @query 
+0

理想的演示,因爲這些表將在報告中無數的引用,我想創建一個「視圖」,我可以根據需要進行查詢。 – user2634360

+0

在上面的查詢中是否需要自定義任何內容?它不起作用。 – user2634360

+0

嘗試這樣'EXEC sp_executesql的@ query' – Nithesh

0

在這個腳本創建過程。在此過程中的身體使用其構建SQL語句,然後運行該語句動態SQL

CREATE PROCEDURE dbo.getEvents 
AS 
DECLARE @dml nvarchar(max) 
SELECT @dml = COALESCE(@dml + ' UNION ALL SELECT * FROM ', 'SELECT * FROM ') 
       + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) 
FROM sys.schemas s INNER JOIN sys.tables t ON s.schema_id = t.schema_id     
WHERE s.name = 'dbo' AND t.name LIKE 'event%' 
--PRINT @dml 
EXEC sp_executesql @dml 

請參見第SQLFiddle

+0

謝謝。這很好。有沒有辦法將它變成「VIEW」來簡化我的報告? – user2634360

+0

不能使用動態SQL從視圖中,無論是你可以調用 存儲過程。閱讀此篇http://stackoverflow.com/questions/653714/how-to-select-into-temp-table-from-stored-procedure –

+0

可以重新格式化爲一個表值函數? – user2634360