我需要在数据库中的一系列表上编写一个sql视图。问题是该表只包含一个月的历史记录。每个月都会创建一个新表。例如,dbo.LOG_2015_09将是9月份的表格。
我需要写一个视图,向我展示过去60天的历史。
SELECT * FROM dbo.LOG_2015_09
UNION ALL
SELECT * FROM dbo.LOG_2015_08
问题是下个月这将不再有效。
我仅限于使用SQL视图。存储过程不是一种选择。
我有一个想法是创建一个表函数来获取相关表,但我认为我们不能使用动态SQL来生成代码。
感谢您的帮助。
编辑:这是应用程序创建的表定义的示例。我没有任何修改表的权限。我只能创建视图或功能。:
CREATE TABLE [dbo].[CLOG201509](
[LASTUPD] [datetime] NULL,
[CREDATE] [datetime] NULL,
[SERIALNO] [int] NOT NULL,
[LSEQNO] [int] NOT NULL,
[EVENTNO] [int] NOT NULL,
[EVDATE] [datetime] NOT NULL,
[LOGDATE] [datetime] NOT NULL,
CONSTRAINT [PK__CLOG2015__D08461DA672EF3E9] PRIMARY KEY CLUSTERED
([SERIALNO] ASC,
[EVENTNO] ASC,
[LSEQNO] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
这些表每个包含超过一百万条记录。
编辑:我试图创建一个TABLE UDF来组合表但不能使用动态SQL我不知道如何根据日期更改表。我希望将这个月表与上个月表联合起来参考。问题是我必须记住每个月都更新这个UDF,直到我这样做,数据不可用。
CREATE FUNCTION [dbo].[KS_ManitouSync_OPT_CLOG]()
RETURNS TABLE
AS
RETURN
(
SELECT *
FROM CLOG201511
UNION ALL
SELECT *
FROM CLOG201512
)
提醒我不能使用存储过程,它必须只能由支持单个SQL SELECT查询的程序使用。
感谢您的帮助。
答案 0 :(得分:1)
您可以创建一个分区视图来对所有表进行联合,但每个表必须有一个约束来限制其中允许的时间间隔。在这种情况下,当您从分区视图中选择时,在分区列上使用WHERE子句,只会访问相关表。
请参阅https://technet.microsoft.com/en-us/library/ms190019(v=sql.105).aspx
答案 1 :(得分:1)
通过存储过程创建视图。在那里你可以找出所有存在的日志表,然后构建你的create view命令。
看一下我过去的一个非常相似的问题: