sql server 按月对数据表进行分区
当某张数据表数据量较大时,我们就需要对该表进行分区处理,以下sql语句,会将数据表按月份,分为12个分区表存储数据,废话不多说,直接上脚本:
use [SIT_L_TMS] --开启 XP_CMDSHELL;开启创建文件夹权限
GO
SP_CONFIGURE 'SHOW ADVANCED OPTIONS',1
RECONFIGURE
GO
SP_CONFIGURE 'XP_CMDSHELL',1
RECONFIGURE
GO --数据库名
declare @servername varchar(20) ;
-- 变量赋值
set @servername = 'SIT_L_TMS' ; --待执行sql
declare @sql varchar(1024) ; --设置年
declare @year varchar(10);
set @year = CONVERT(varchar(4), GETDATE(), 23);
--月数
declare @summonths int;
set @summonths = 12; --文件组存放路径
declare @file_path varchar(200);
set @file_path = 'F:\db_group\' + @year; --判断文件夹是否存在,不存在则创建
declare @TEMP TABLE(A INT,B INT,C INT);--建立虚拟表,用来判断文件夹是否存在
INSERT @TEMP EXEC [MASTER]..XP_FILEEXIST @file_path;
IF NOT EXISTS(SELECT * FROM @TEMP WHERE B=1)
BEGIN
--XP_CMDSHELL不允许使用变量拼接,所以使用exec方法
declare @EX NVARCHAR(255)
SET @EX = 'EXEC XP_CMDSHELL ''MKDIR ' + @file_path + '''';
EXEC(@EX)
END --文件组名
declare @filegroupname varchar(50);
--文件组路径:完整路径,含文件名
declare @filegrouppath varchar(300); --分区函数
declare @partition_func varchar(128) ;
set @partition_func = 'l_tms_partition_func'; --分区结构
declare @partition_scheme varchar(128) ;
set @partition_scheme = 'l_tms_partition_scheme'; --时间
declare @datetime varchar(10);
--按时间分区语句
declare @fuction_sql varchar(1024);
--按时间分区结构
declare @scheme_sql varchar(1024); --建立12个分区
declare @i int;
set @i = 1;
while @i<(@summonths+1)
begin
declare @date varchar(10) if @i < 10
begin
set @date = '0' + convert(varchar,@i);
end
else
begin
set @date = convert(varchar,@i);
end -- 添加文件组名;文件组名按日期:例如20180401
set @datetime = @year + @date;
set @filegroupname = 'Group' + @year + @date;
set @sql = 'alter database ' + @servername + ' add filegroup '+ @filegroupname;
print @sql;
exec(@sql); --将文件组名与文件关联
set @filegrouppath = @file_path + '\' + @filegroupname + '.ndf';
set @sql = 'alter database '+ @servername + ' add file (name=N'''+ @filegroupname +''',filename=N'''+ @filegrouppath +''',size=5Mb,filegrowth=5mb) to filegroup '+ @filegroupname;
print @sql;
exec(@sql); --拼接按时间分区函数/拼接按时间分区结构
if @i = 1
begin
set @fuction_sql = '''' + @datetime + '01 23:59:59' + '''' + ',';
set @scheme_sql = '['+ @filegroupname +']' + ',';
end
else if @i = 12
begin
set @fuction_sql = @fuction_sql + '''' + @datetime + '01 23:59:59' + '''';
set @scheme_sql = @scheme_sql + '['+ @filegroupname +']';
end
else
begin
set @fuction_sql = @fuction_sql + '''' + @datetime + '01 23:59:59' + '''' + ',';
set @scheme_sql = @scheme_sql + '['+ @filegroupname +']' + ',';
end set @i = @i + 1; end -- 创建分区函数
set @sql = 'create partition function '+ @partition_func +'(DATETIME) as range left for values('+ @fuction_sql+')';
print @sql;
exec(@sql); -- 创建分区结构(将分区函数和分区组对应起来)
set @sql = 'create partition scheme '+ @partition_scheme +' as partition '+ @partition_func +' to(' + @scheme_sql + ',[Primary])';
print @sql;
exec(@sql); --将普通表转换为分区表
--删除主键
ALTER TABLE [dbo].[TMS_RealTimeEqptInfo] DROP constraint PK_TMS_RealTimeEqptInfo
--创建主键,但不设为聚集索引
ALTER TABLE [dbo].[TMS_RealTimeEqptInfo] ADD constraint PK_TMS_RealTimeEqptInfo PRIMARY KEY NONCLUSTERED
(
[ID] ASC
)ON [PRIMARY] --创建一个新的聚集索引,并在该聚集索引中使用分区方案;注意修改分区方案的名字,按字段WriteTime进行分区
CREATE CLUSTERED INDEX CT_RealTimeData on TMS_RealTimeEqptInfo([WriteTime])
ON etm_partition_scheme([WriteTime])
数据库名称和数据表名称自行对应修改。
sql server 按月对数据表进行分区的更多相关文章
- sql Server中临时表与数据表的区别
sql server 中临时表与数据表的区别 1.如何判断临时表和数据表已生成 --如何判断临时表是否已创建--- if exists(select * from tempdb..sysobjects ...
- 转:Sql Server中清空所有数据表中的记录
如果要删除数据表中所有数据只要遍历一下数据库再删除就可以了,清除所有数据我们可以使用搜索出所有表名,构造为一条SQL语句进行清除了,这里我一一给各位同学介绍. 使用sql删除数据库中所有表是不难的 ...
- Sql Server中清空所有数据表中的记录
Sql Server中清空所有数据表中的记录 清空所有数据表中的记录: 代码如下:exec sp_msforeachtable @Command1 ='truncate table ?'删除所有数据 ...
- SQL Server 创建和修改数据表
一.CREATE语句(创建) 1.创建DataBase 1.CONTAINMENT SQL Server 2012 新功能 , 默认值是OFF .(太高级 书上也没有详细介绍). 2.ON ON用于两 ...
- SQL Server 创建 修改 删除数据表
1. 图形界面方式操作数据表 (1)创建和修改数据表 列名中如果有两个以上单词时,最好用下划线连接,否则可能会给将来的查询维护带来不便.我们公司美国佬做的数据库就很烦,所有列名都有空格,一旦忘记用方括 ...
- 【转载】SQL Server - 使用 Merge 语句实现表数据之间的对比同步
原文地址:SQL Server - 使用 Merge 语句实现表数据之间的对比同步 表数据之间的同步有很多种实现方式,比如删除然后重新 INSERT,或者写一些其它的分支条件判断再加以 INSERT ...
- Oracle和sql server中复制表结构和表数据的sql语句
在Oracle和sql server中,如何从一个已知的旧表,来复制新生成一个新的表,如果要复制旧表结构和表数据,对应的sql语句该如何写呢?刚好阿堂这两天用到了,就顺便把它收集汇总一下,供朋友们参考 ...
- sql server的数据库个数、表个数及表的数据量统计
sql server的数据库个数.表个数及表的数据量统计 --由于今天要监控数据,急需统计实例中1有多少库2库里有多少表3每个表有多少数据 --将写好的代码贴出来,用到如下的: --sysobje ...
- 使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历
原文:使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历 常常遇到需要向SQL Server插入批量数据,然后在存储过程中对这些数据进行进一步处理的情况.存储过 ...
随机推荐
- cenos 安装hadoop
1 创建hadoop用户 2 下载jdk和hadoop安装包 3 在root用户下解压jdk到/usr/java 4 配置JAVA_HOME 编辑/etc/profile,在文件最后添加 # set ...
- 2018 HNUCM ACM集训队选拔第一场
1.小c的倍数问题 http://acm.hdu.edu.cn/showproblem.php?pid=6108 分析: 比赛的时候真的是各种想,结果发现自己是想多了...数论基础差得一批 求有多少个 ...
- Linux mysql 5.5.10 二进制安装过程记录和 修改 密码 登录
1.useradd clouder2.解压缩mysql.tar.bz2到/home/clouder2.mv /etc/my.cnf /etc/my.cnf.bak3./home/clouder/mys ...
- Notes 20180505 : 计算机的基础知识
总是想要去深入了解一下计算机,可真正去了解的时候才发现那并非一日之功,关于计算机的学习,并未放弃,但是化知识为笔记尚需时日,今日我们先简单了解一下计算机,然后开始Java语言的学习. 1 计算机的基础 ...
- iOS 根据url生成二维码贴到底图上
根据url 生成指定尺寸的二维码图片 UIImage * createBinaryCodeImg(const char * url ,CGFloat size) { //create binary c ...
- [转载]Linux crontab命令解析
名称 : crontab crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表.-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权 ...
- ABAP术语-URL
URL 原文:http://www.cnblogs.com/qiangsheng/archive/2008/03/20/1114193.html Uniform Resource Locator (U ...
- 第三月 day03.笔记
函数在调用的时候回形成一个私有作用域,内部变量不会被外面访问,这种保护机制叫做闭包,这就意味着函数调用完了,这个函数形成的栈内存就会被销毁,但有时候我们不希望被销毁. * 函数归属谁和他的调用没有关系 ...
- Vue 父组件调用子组件的方法
qwq 前两天看了下vue,父子组件方法的调用,怕忘记,所以做个小记录. 一.父组件调用子组件的方法 1.父组件 <template> <div id="rightmen ...
- ASP.net 加载不了字体Failed to load resource: the server responded with a status of 404 (Not Found)
在bootstrap下加载不了字体内容.出现下列错误. 1.打开IIS找到部署的网站,点击MIME类型,把.woff和.woff2两个类型分别添加到新类型中,重启网站即可.