我参考网上的,写了2给存储过程,一个初始创建文分区方案分区函数;一个可以通过作业新增文件组文件件;
但是初始没有绑定表,网上的都是在创建表是绑定分区方案,但是我的表是已经存在的,怎么绑定
初始存储过程
USE [DB3]
GO
/****** Object: StoredProcedure [dbo].[FQ_DB3_his_order_goods2_part_ID_first] Script Date: 2024/7/12 9:25:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--每新增@FQROWS(500000)条记录新增一个文件和文件组
Create PROCEDURE [dbo].[FQ_DB3_his_order_goods2_part_ID_first]
AS
BEGIN
DECLARE --@FilePath VARCHAR(100), --文件路径
--@FileName VARCHAR(100), --文件名称
--@FileSize VARCHAR(100), --文件大小
--@FileGrowth VARCHAR(100), --文件增长
--@FileMaxLimit VARCHAR(100), --文件最大限制
--@FileGroupName VARCHAR(100), --文件组名称
--@Database VARCHAR(100), --操作数据库
@CurrentNum VARCHAR(2), --当前新分区计数
@SchemeName VARCHAR(100), --分区方案名称
--@PartitionName VARCHAR(100), --分区函数名称
@FQROWS int=100000; --每个分区文件放的记录数 默认 500000
--@sql VARCHAR(400); -- 赋值文件属性
--SET @FileSize = '8MB';
--SET @FileGrowth = '1MB';
--SET @FileMaxLimit = 'unlimited';
-- 赋值分区属性
SET @SchemeName = 'his_order_goods2_part_id_fa'; --'cti_IDFQ_Scheme'; 分区方案名称
--SET @PartitionName ='his_order_goods2_part_id_func()'; -- 'cti_IDFQ_Func()'; 分区函数名称
declare @rows as int
select @rows=count(*) from his_order_goods2_part;
--没有为当前表创建分区和分区函数
SELECT count(*) FROM sys.partition_functions where name='his_order_goods2_part_id_fa'
if (SELECT count(*) FROM sys.partition_functions where name=@SchemeName)<=0
begin
--创建文件组语句
ALTER DATABASE DB3 ADD FILEGROUP [wjz_part_01]
--创建文件语句
ALTER DATABASE DB3 ADD FILE ( NAME = N'F01_part', FILENAME = N'D:\DB3\F01_part.ndf' , SIZE = 100MB , FILEGROWTH = 500MB ) TO FILEGROUP [wjz_part_01]
--创建分区函数
CREATE PARTITION FUNCTION his_order_goods2_part_id_func(bigint)
AS RANGE right FOR VALUES
(
@FQROWS
);
--创建分区方案
CREATE PARTITION SCHEME his_order_goods2_part_id_fa
AS PARTITION his_order_goods2_part_id_func
TO (
[PRIMARY],
[wjz_part_01]
);
end
return 1
END;
可以自动新增文件组和文件的存储过程
USE [DB3]
GO
/****** Object: StoredProcedure [dbo].[FQ_DB3_his_order_goods2_part_ID] Script Date: 2024/7/11 17:35:52 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- exec FQ_DB3_his_order_goods2_part_ID
--每新增@FQROWS(500000)条记录新增一个文件和文件组
CREATE PROCEDURE [dbo].[FQ_DB3_his_order_goods2_part_ID]
AS
BEGIN
--BEGIN TRANSACTION
DECLARE @FilePath VARCHAR(100), --文件路径
@FileName VARCHAR(100), --文件名称
@FileSize VARCHAR(100), --文件大小
@FileGrowth VARCHAR(100), --文件增长
@FileMaxLimit VARCHAR(100), --文件最大限制
@FileGroupName VARCHAR(100), --文件组名称
@Database VARCHAR(100), --操作数据库
@CurrentNum VARCHAR(2), --当前新分区计数
@SchemeName VARCHAR(100), --分区方案名称
@PartitionName VARCHAR(100), --分区函数名称
@FQROWS int=100000, --每给分区文件放的记录数 默认 500000
@sql VARCHAR(400); -- 赋值文件属性
SET @FileSize = '8MB';
SET @FileGrowth = '1MB';
SET @FileMaxLimit = 'unlimited';
-- 赋值分区属性
SET @SchemeName = 'his_order_goods2_part_id_fa'; --'cti_IDFQ_Scheme'; 分区方案名称
SET @PartitionName ='his_order_goods2_part_id_func()'; -- 'cti_IDFQ_Func()'; 分区函数名称
declare @rows as int
select @rows=count(*) from his_order_goods2_part;
print @rows
-- --没有为当前表创建分区和分区函数
--SELECT count(*) FROM sys.partition_functions where name='his_order_goods2_part_id_fa'
--if (SELECT count(*) FROM sys.partition_functions where name=@SchemeName)<=0
--begin
-- --创建文件组语句
-- ALTER DATABASE DB3 ADD FILEGROUP [wjz_part_01]
-- --创建文件语句
-- ALTER DATABASE DB3 ADD FILE ( NAME = N'F01_part', FILENAME = N'D:\DB3\F01_part.ndf' , SIZE = 100MB , FILEGROWTH = 500MB ) TO FILEGROUP [wjz_part_01]
-- --创建分区函数
-- CREATE PARTITION FUNCTION his_order_goods2_part_id_func(bigint)
-- AS RANGE right FOR VALUES
-- (
-- @CurrentNum
-- );
-- --创建分区方案
-- CREATE PARTITION SCHEME his_order_goods2_part_id_fa
-- AS PARTITION his_order_goods2_part_id_func
-- TO (
-- [PRIMARY],
-- [wjz_part_01]
-- );
--end
--获取分区数 并根据记录数判断是否新建
declare @fqs as int=0
SELECT @fqs=count(*)+1 FROM sys.partition_range_values
where function_id=(SELECT function_id FROM sys.partition_functions where name='his_order_goods2_part_id_func');
print @fqs
--当 分区数*设置的分区记录数(500000)<表的总行数 添加一个文件
if @fqs*@FQROWS<@rows
begin
set @CurrentNum=cast(@fqs+1 as VARCHAR(2));
print '新增分区文件和文件组'
SET @FileName = 'dbfn_part' + @CurrentNum;
SET @FilePath = 'D:\DB3';
-- 赋值数据库属性
SET @Database = '[DB3]';
-- 赋值文件组属性
SET @FileGroupName = 'fg_part' + @CurrentNum;
-- 创建文件组
SET @sql = 'alter database ' + @Database + ' add filegroup ' + @FileGroupName + '';
EXEC (@sql);
-- 创建文件,并绑定文件组
SET @sql = 'alter database ' + @Database + ' add file (name=''' + @FileName + ''',' + 'filename=''' + @FilePath + '\'
+ @FileName + '.ndf'',' + 'size = ' + @FileSize + ',' + 'filegrowth = ' + @FileGrowth + ',' + 'maxsize = '
+ @FileMaxLimit + '' + ')' + 'to filegroup ' + @FileGroupName;
EXEC (@sql);
-- 修改分区方案
SET @sql = 'alter partition scheme ' + @SchemeName + ' next used ' + @FileGroupName + '';
EXEC (@sql);
-- 修改分区函数
print '@CurrentNum'
print @CurrentNum
print @FQROWS
declare @range_val int=cast(@CurrentNum as int)*@FQROWS;
print @range_val
declare @str_range_val varchar(10)
set @str_range_val=cast(@range_val as varchar(10))
print @str_range_val
--SET @sql = 'alter partition function ' + @PartitionName + ' split range (N''' +CONVERT(VARCHAR(10), getdate(), 120)+''')'
SET @sql = 'alter partition function ' + @PartitionName + ' split range (cast(' + @str_range_val+ ' as int) )'
print @sql
EXEC (@sql);
end
else
begin
print '不新增'
end
return 1
--COMMIT TRANSACTION
END;