我參考網上的,寫了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;
?