1.创建的代码如下:

CREATE PARTITION FUNCTION [01_SubjectiveScoreInfoPartitionFunction](NVARCHAR(26))
AS RANGE LEFT FOR VALUES
(
N'',
N'',
N'',...
) CREATE PARTITION SCHEME [01_SubjectiveScoreInfoPartitionSchema]
AS PARTITION [01_SubjectiveScoreInfoPartitionFunction] ALL TO ([PRIMARY]) CREATE CLUSTERED INDEX [IX_01_SubjectiveScoreInfo_Clustered] ON [01_SubjectiveScoreInfo] (QuestionGroupCode)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [01_SubjectiveScoreInfoPartitionSchema](QuestionGroupCode)

2.增加分区值的代码如下:

ALTER PARTITION FUNCTION [01_SubjectiveScoreInfoPartitionFunction] ()
SPLIT RANGE ('');

3.查询当前分区情况:

SELECT ps.name,pf.name,boundary_id,value
FROM sys.partition_schemes ps
INNER JOIN sys.partition_functions pf ON pf.function_id=ps.function_id
INNER JOIN sys.partition_range_values prf ON pf.function_id=prf.function_id
WHERE pf.name = '01_SubjectiveScoreInfoPartitionFunction'

4.创建单一文件组分区完整示例代码如下:

CREATE PROCEDURE [dbo].[spPartitionSubjectiveScoreInfo]
(
@CourseID AS NVARCHAR(2)
)
AS
BEGIN
BEGIN TRAN
BEGIN TRY
DECLARE @sql NVARCHAR(MAX)
DECLARE @QuestionGroupCodeList NVARCHAR(MAX)
SET @QuestionGroupCodeList = ''
SET @sql = N'
SELECT @QuestionGroupCodeList = @QuestionGroupCodeList + ''N''''''+[Code]+'''''',''
FROM [OMSDB].[dbo].[QuestionGroupInfo]
WHERE LEFT(RIGHT(Code,8),2)=@CourseID'
EXECUTE sp_executesql @sql,N'@QuestionGroupCodeList NVARCHAR(MAX) OUTPUT,@CourseID NVARCHAR(2)',
@QuestionGroupCodeList=@QuestionGroupCodeList OUTPUT,
@CourseID=@CourseID IF RIGHT(@QuestionGroupCodeList,1)=','
SET @QuestionGroupCodeList = LEFT(@QuestionGroupCodeList,LEN(@QuestionGroupCodeList)-1) SET @sql = N'
CREATE PARTITION FUNCTION ['+@CourseID+'_SubjectiveScoreInfoPartitionFunction](NVARCHAR(26))
AS RANGE LEFT FOR VALUES ( '+ @QuestionGroupCodeList +' )'
EXECUTE sp_executesql @sql SET @sql = N'
CREATE PARTITION SCHEME ['+@CourseID+'_SubjectiveScoreInfoPartitionSchema]
AS PARTITION ['+@CourseID+'_SubjectiveScoreInfoPartitionFunction] ALL TO ([PRIMARY])'
EXECUTE sp_executesql @sql SET @sql = N'
CREATE CLUSTERED INDEX [IX_'+@CourseID+'_SubjectiveScoreInfo_Clustered] ON ['+@CourseID+'_SubjectiveScoreInfo] (QuestionGroupCode)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON ['+@CourseID+'_SubjectiveScoreInfoPartitionSchema](QuestionGroupCode)'
EXECUTE sp_executesql @sql
COMMIT TRAN END TRY
BEGIN CATCH
PRINT 'Error:' + CONVERT(VARCHAR,ERROR_NUMBER()) + ',Message:' + error_message()
ROLLBACK TRAN
END CATCH
END

5.创建多文件组分区完整代码如下:

USE [OMSDB]

DECLARE @dbPath NVARCHAR(MAX)
DECLARE @CourseID NVARCHAR(MAX)
SET @dbPath = 'D:\firstelite\data2'
SET @CourseID = '' DECLARE @sql NVARCHAR(MAX)
DECLARE @QuestionGroupCodes TABLE(QuestionGroupCode NVARCHAR(50))
DECLARE @QuestionGroupCodeList NVARCHAR(MAX) INSERT INTO @QuestionGroupCodes(QuestionGroupCode)
SELECT [Code] FROM [OMSDB].[dbo].[QuestionGroupInfo]
WHERE LEFT(RIGHT(Code,8),2)=@CourseID
ORDER BY [Code] ASC --删除所有文件组
SET @sql = N''
SELECT @sql = @sql + 'DBCC SHRINKFILE(N'''+QuestionGroupCode+''', EMPTYFILE);' + CHAR(13) + CHAR(10)
+ 'ALTER DATABASE OMSDB REMOVE FILE ['+QuestionGroupCode+'];' + CHAR(13) + CHAR(10)
+ 'ALTER DATABASE OMSDB REMOVE FILEGROUP FG' + QuestionGroupCode + ';' + CHAR(13) + CHAR(10)
FROM @QuestionGroupCodes
PRINT @sql
EXECUTE sp_executesql @sql --动态创建所有文件组
SET @sql = N''
SELECT @sql = @sql + 'ALTER DATABASE OMSDB ADD FILEGROUP FG' + QuestionGroupCode + ';' + CHAR(13) + CHAR(10)
+ 'ALTER DATABASE OMSDB ADD FILE(name=N'''+ QuestionGroupCode +''',filename=N'''+ @dbPath + '\' + QuestionGroupCode +'.ndf'',size=5MB,filegrowth=5MB) to filegroup FG' + QuestionGroupCode + ';' + CHAR(13) + CHAR(10)
FROM @QuestionGroupCodes
PRINT @sql
EXECUTE sp_executesql @sql --动态创建分区函数
SET @QuestionGroupCodeList = ''
SELECT @QuestionGroupCodeList = @QuestionGroupCodeList + 'N'''+[QuestionGroupCode]+''','
FROM @QuestionGroupCodes IF RIGHT(@QuestionGroupCodeList,1)=','
SET @QuestionGroupCodeList = LEFT(@QuestionGroupCodeList,LEN(@QuestionGroupCodeList)-1) SET @sql = N'
CREATE PARTITION FUNCTION ['+@CourseID+'_SubjectiveScoreInfoPartitionFunction](NVARCHAR(26))
AS RANGE LEFT FOR VALUES ( '+ @QuestionGroupCodeList +' )'
PRINT @sql
EXECUTE sp_executesql @sql --动态创建分区模式
SET @QuestionGroupCodeList = '[PRIMARY],'
SELECT @QuestionGroupCodeList = @QuestionGroupCodeList + '[FG'+[QuestionGroupCode]+'],'
FROM @QuestionGroupCodes IF RIGHT(@QuestionGroupCodeList,1)=','
SET @QuestionGroupCodeList = LEFT(@QuestionGroupCodeList,LEN(@QuestionGroupCodeList)-1) SET @sql = N'
CREATE PARTITION SCHEME ['+@CourseID+'_SubjectiveScoreInfoPartitionSchema]
AS PARTITION ['+@CourseID+'_SubjectiveScoreInfoPartitionFunction] TO (' + @QuestionGroupCodeList + ')'
PRINT @sql
EXECUTE sp_executesql @sql --创建表分区
SET @sql = N'
CREATE CLUSTERED INDEX [IX_'+@CourseID+'_SubjectiveScoreInfo_Clustered] ON ['+@CourseID+'_SubjectiveScoreInfo]
(
QuestionGroupCode,
ID
)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON ['+@CourseID+'_SubjectiveScoreInfoPartitionSchema](QuestionGroupCode)'
PRINT @sql
EXECUTE sp_executesql @sql --SET @sql = N'
-- CREATE CLUSTERED INDEX [IX_'+@CourseID+'_SubjectiveScoreInfoFlag_Clustered] ON ['+@CourseID+'_SubjectiveScoreInfoFlag]
-- (
-- [QuestionGroupCode]
-- ) WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
-- ON ['+@CourseID+'_SubjectiveScoreInfoPartitionSchema](QuestionGroupCode)'
--PRINT @sql
--EXECUTE sp_executesql @sql --其它相关语句
--DROP PARTITION SCHEME [01_SubjectiveScoreInfoPartitionSchema]
--DROP PARTITION FUNCTION [01_SubjectiveScoreInfoPartitionFunction] --ALTER DATABASE OMSDB ADD FILEGROUP FG11111111111500040401000301;
--ALTER DATABASE OMSDB ADD FILE(name=N'11111111111500040401000301',filename=N'D:\firstelite\data2\11111111111500040401000301.ndf',size=5MB,filegrowth=5MB); --DBCC SHRINKFILE(N'11111111111500040401000301', EMPTYFILE)
--ALTER DATABASE OMSDB REMOVE FILE [11111111111500040401000301]
--ALTER DATABASE OMSDB REMOVE FILEGROUP FG11111111111500040401000301;

6.MSDN示例代码如下:

A. 将已分区表或索引的一个分区拆分为两个分区

以下示例创建了一个分区函数,以将表或索引划分为四个分区。ALTER PARTITION FUNCTION 将某个分区拆分为两个分区,从而总共创建了五个分区。

CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE LEFT FOR VALUES ( 1, 100, 1000 );
GO
--Split the partition between boundary_values 100 and 1000
--to create two partitions between boundary_values 100 and 500
--and between boundary_values 500 and 1000. ALTER PARTITION SCHEME SchemaForParirion NEXT USED 'PRIMARY'
ALTER PARTITION FUNCTION myRangePF1 ()
SPLIT RANGE (500);

B. 将已分区表的两个分区合并为一个分区

以下示例与上例创建同一分区函数,然后将两个分区合并为一个分区,从而总共创建了三个分区。

CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE LEFT FOR VALUES ( 1, 100, 1000 );
GO
--Merge the partitions between boundary_values 1 and 100
--and between boundary_values 100 and 1000 to create one partition
--between boundary_values 1 and 1000.
ALTER PARTITION FUNCTION myRangePF1 ()
MERGE RANGE (100);

总结:

  目前无法做如何删除分区,只能更改分区值,所以分区结构一旦创建,无法更改。

  网上有人给出如下2种方案:

  1.新建一张表,把数据插入新表,删除旧表,才能删除分区,然后重命名旧表,新建表分区。一般分区的表数据量都特别大,迁移数据耗时,本人没有试验。

2.按如下步骤,但我试了,没有成功,最后2步一直提示分区使用中,无法操作。

假设你创建的步骤是这样的:
1、CREATE PARTITION FUNCTION PF1(INT) AS RANGE LEFT FOR VALUES (1, 2, 3, 4)
2、CREATE PARTITION SCHEME PS1 AS PARTITION PF1 ALL TO ([PRIMARY])
3、CREATE CLUSTERED INDEX CIDX_X ON X(col1) ON PS1(col1)
删除的步骤应该是这样的:
1、DROP INDEX CIDX_X on X
2、CREATE CLUSTERED INDEX CIDX_X1 ON X(col1) ON [PRIMARY]
3、DROP PARTITION SCHEME PS1
4、DROP PARTITION FUNCTION PF1
5、DROP INDEX CIDX_X1 ON X

SQL Server 表分区备忘的更多相关文章

  1. SQL Server表分区的NULL值问题

    SQL Server表分区的NULL值问题 SQL Server表分区只支持range分区这一种类型,但是本人觉得已经够用了 虽然MySQL支持四种分区类型:RANGE分区.LIST分区.HASH分区 ...

  2. SQL Server表分区【转】

    转自:http://www.cnblogs.com/knowledgesea/p/3696912.html SQL Server表分区   什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在 ...

  3. SQL Server表分区详解

    原文:SQL Server表分区详解 什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆 ...

  4. SQL Server表分区-水平分区

    SQL Server表分区,sql server水平分区 转自:http://www.cnblogs.com/knowledgesea/p/3696912.html  根据时间的,直接上T-SQL代码 ...

  5. 8、SQL Server 表分区

    什么是表分区?表分区其实就是将一个大表分成若干个小表.表分区可以从物理上将一个大表分成几个小表,但是逻辑上还是一个表.所以当执行插入.更新等操作的时候,不需要我们去判断应该插入或更新到哪个表中.只需要 ...

  6. SQL Server表分区案例

    --学习创建表分区脚本/*SQL SERVER 2005中以上版本,终于引入了表分区,就是说,当一个表里的数据很多时,可以将其分拆到多个的表里,大大提高了性能.下面举例子说明之*/ --------- ...

  7. sql server 表分区

    背景: 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在不同的 ...

  8. SQL Server表分区(水平分区及垂直分区)

    什么是表分区? 表分区分为水平表分区和垂直表分区,水平表分区就是将一个具有大量数据的表,进行拆分为具有相同表结构的若干个表:而垂直表分区就是把一个拥有多个字段的表,根据需要进行拆分列,然后根据某一个字 ...

  9. SQL Server 表分区之水平表分区

    什么是表分区? 表分区分为水平表分区和垂直表分区,水平表分区就是将一个具有大量数据的表,进行拆分为具有相同表结构的若干个表:而垂直表分区就是把一个拥有多个字段的表,根据需要进行拆分列,然后根据某一个字 ...

随机推荐

  1. bluemix部署(一)简单测试,搭建样本flask程序。

    1.注册bluemix 这个略 2.登录bluemix 这个也略 3.创建组织 这个确实是和我们的思想不一样.要创建组织.为什么呢?国内的很多服务都没见过组织这个概念.貌似神符合一个中国人是条龙,十个 ...

  2. MySQL输入密码后闪退

    刚刚我遇到这个问题,服务里MySQL是启状态的,所以我求助百度,发现很多种说法,我试了几个,还是不行,后来想起来我的密码不对,于是换了正确的密码试了一下,没毛病,进去了. 所以输入密码闪退时,首先确定 ...

  3. DataTable数据统计方法

    调用方法: public object Compute(string strExpression,string strFilter) 参数说明: strExpression:要计算的表达式字符串,基本 ...

  4. shiro学习(二)身份验证

    身份验证,即在应用中谁能证明他就是他本人.一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明. 在shiro中,用户需要提供principals (身份)和cre ...

  5. L290 英语中级班-3月上

    1元音饱满度 a [ei] name gamee [i:] he she mei [ai] fine likeo [ou] go homeu [ u:] use blue 2口音适应 刚开始说时,慢点 ...

  6. 框架:初识Spring

    Spring篇 第一章.Spring简介 一.Spring的体系结构 1.介绍 Spring有20多个的模块,这些模块分布与核心容器(Core Container).数据访问/集成(Data Acce ...

  7. ios中scrollView基本用法

    设置scrollView内容的尺寸(滚动的范围) self.scrollView.contentSize = CGSizeMake(, ); self.scrollView.contentSize = ...

  8. python Django rest-framework 序列化步骤

    django-rest-framework,是一套基于Django 的 REST 框架,是一个强大灵活的构建 Web API 的工具包.本文介绍一下 django-rest-framework 的简单 ...

  9. MySQL Workbench将模型生成SQL文件出错

    采用MySQL Workbench 设计好表和表关系后,从 File | Export 菜单中,选择 Forward Engineer SQL CREATE Script(正向引擎), 将我们的模型生 ...

  10. KB/MB/GB。。单位换算

    今天遇到一个需求,需要把数据单位进行换算,记录一下.写的不好请勿见怪. function bytesToSize( bytes ) {//单位转化         var k = 1024,      ...