mssql分区视图

分区列规则
分区列存在于每个成员表上,并且通过 CHECK 约束标识特定表中的可用数据。分区列必须遵守如下规则: 

每个基表都拥有键值由 CHECK 约束所强制的分区列。每个表的 CHECK 约束的键范围与其它任何表互不重叠。任何分区列的给定值必须只能映射到一个表。CHECK 约束只能使用以下运算符:BETWEEN、AND、OR、<、<=、>、>=、=。

分区列不能是标识、默认或 timestamp 列。

在视图中,分区列必须位于每个 SELECT 语句的选择列表中相同的序号位置处。例如,分区列要么总是每个选择列表中的首列,要么总是每个选择列表中的第二列,依次类推。

分区列不允许为空。

分区列必须是表的主键的一部分。

分区列不能是计算列。

在分区列上必须只有一个约束。如果约束多于一个,SQL Server 会忽略所有的约束并在确定视图是否为分区视图时不考虑这些约束。

分区列的可更新性没有约束。

 

如果分区列是年份,则可以考虑增加一个guid列作为组合主键,如果有必要再加一个自动ID,如果各表ID可重复则都从1开始,否则不同表的ID可从不同的值开始,保证不重复。然后以ID为聚集索引。或在应用程序中做一个ID生成器,保证各表之间ID不重复

例:

 

CREATE TABLE [dbo].[t2024](
[ID] [int] NOT NULL,
[y] [datetime] NOT NULL,
[mc] [nchar](10) NULL,
CONSTRAINT [PK_t2024] PRIMARY KEY CLUSTERED
(
[ID] ASC,
[y] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

 

ALTER TABLE [dbo].[t2024] WITH CHECK ADD CONSTRAINT [CK_t2024] CHECK (([y]>='2024-01-01' AND [y]<'2025-01-01'))
GO

 

 

CREATE TABLE [dbo].[t2025](
[ID] [int] NOT NULL,
[y] [datetime] NOT NULL,
[mc] [nchar](10) NULL,
CONSTRAINT [PK_t2025] PRIMARY KEY CLUSTERED
(
[ID] ASC,
[y] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t2025] WITH CHECK ADD CONSTRAINT [CK_t2025] CHECK (([y]>='2025-01-01' AND [y]<'2026-01-01'))
GO

 

--视图

create view [dbo].[vt] as
select * from t2024
union all
select * from t2025

 --插入

  insert into vt(id,y,mc) values(1,'2024-01-01 10:30:20','xx')

  insert into vt(id,y,mc) values(2,'2025-01-01 10:30:20','xx')

 ID要在应用系统中生成,保持多个表中唯一

posted @ 2020-03-21 22:31  81  阅读(206)  评论(0)    收藏  举报