需要查询动态创建的表

时间:2013-07-30 14:01:14

标签: sql dynamic

我们有一个应用程序将记录的数据存储在名为“ACManager”的数据库和名为“Events_1”的表中。

当此表达到一定数量的记录时,软件会创建另一个名为“Events_2”的表。这随着数据的增长而持续。我需要能够自动查询这些数据,就像它在一个表中没有干扰一样。当应用程序动态创建新表时,使用UNION最终会创建无效查询。请同时考虑性能。

所以我们需要将Query作为一个没有UNION的表:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

上的演示