2

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

当该表达到一定数量的记录时,软件会创建另一个名为“ Events_2”的表。随着数据的增长,这种情况仍在继续。我需要能够自动查询这些数据,就好像它们都在一个表中一样而不受干扰。当应用程序动态创建新表时,使用 aUNION最终会创建无效查询。还请考虑性能。

所以我们需要在没有UNION的情况下查询为一张表:

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

2 回答 2

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

于 2013-07-30T15:36:05.070 回答
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
于 2013-07-30T14:24:16.087 回答