从多个归档表中提取数据(Sql Server)

时间:2014-12-09 09:46:32

标签: sql-server tsql report

我正在报表生成器3.0中开发一个报表,我从表dbo.odcalls中提取数据。 现在的问题是这个表是按月在一个单独的数据库(HN_Backup)上存档的,我需要组合将来生成的所有存档表和表中的数据并给出结果。我有2种方法可以做到:

  1. 联合所有表格,但问题是将来存档表格如果存在'不会与工会合作。
  2. 将odcalls中添加的每一个新行插入到只有inser / update(不删除)的不同表中,我会避​​免使用触发器或复制。
  3. 如果有相同的解决方法,请告诉我。提前谢谢

1 个答案:

答案 0 :(得分:1)

让我们创建一些表格:

CREATE TABLE odcalls_2014_10
(
    [ID] TINYINT
)

CREATE TABLE odcalls_2014_11
(
    [ID] TINYINT
)

CREATE TABLE odcalls_2014_12
(
    [ID] TINYINT
)

CREATE TABLE odcalls_2015_01
(
    [ID] TINYINT
)

....

然后,您可以构建一个可以放入存储过程的动态SQL语句:

DECLARE @DynamicSQLStatement NVARCHAR(MAX) = STUFF
(
    (
    SELECT ' UNION ALL SELECT * FROM ' + [TABLE_NAME]
    FROM [INFORMATION_SCHEMA].[TABLES]
    WHERE [TABLE_TYPE] = 'BASE TABLE'
        AND [TABLE_NAME] LIKE 'odcalls_%'
    FOR XML PATH(''), TYPE
    ).value('.', 'NVARCHAR(MAX)')
    ,1
    ,11
    ,''
);

EXECUTE sp_executesql @DynamicSQLStatement;

每次执行该程序时,都将包括所有odcalls表。