動態創建分區函數

--生成分區腳本
declare @DataBaseName nvarchar(50)--數據庫名稱
declare @TableName nvarchar(50)--表名
declare @ColumnName nvarchar(50)--字段名稱
declare @PartNumber int--需要分多少個分區
declare @Location nvarchar(50)--保存分區文件的路徑
declare @Size nvarchar(50)--分區初始化大小
declare @FileGrowth nvarchar(50)--分區文件增量
declare @FunValue int--分區分段值
declare @i int
declare @PartNumberStr nvarchar(50)
declare @sql nvarchar(max)

--設置下面的變量
set @DataBaseName='HT_DATA_DISPLAY2'
set @TableName='tb_test'
set @ColumnName='id'
set @PartNumber=4
set @Location='F:\sql shili\database\'
set @Size='30mb'
set @FileGrowth='10%'
set @FunValue=100000

--創建文件組
set @i=1

while @i<@PartNumber
begin
set @PartNumberStr=RIGHT('0'+CONVERT(nvarchar,@i),2)

set @sql='alter database ['+@DataBaseName+']
add filegroup [FG_'+@TableName+'_'+@ColumnName+'_'+@PartNumberStr+']'

print @sql+char(13)
set @i=@i+1
end



--創建文件
set @i=1

--print char(13)

while @i<@PartNumber
begin
set @PartNumberStr=RIGHT('0'+CONVERT(nvarchar,@i),2)
set @sql='alter database ['+@DataBaseName+']
add file
(Name=N''FG_'+@TableName+'_'+@ColumnName+'_'+@PartNumberStr+'_data'',filename=N'''
+@Location+'FG_'+@TableName+'_'+@ColumnName+'_'+@PartNumberStr+'_data.ndf'',size='
+@Size+',filegrowth='+@FileGrowth+')
to filegroup [FG_'+@TableName+'_'+@ColumnName+'_'+@PartNumberStr+'];'
print @sql+char(13)
set @i=@i+1

end

--創建分區函數

declare @FunValueStr nvarchar(max)
set @i=1
set @FunValueStr=''
while @i<@PartNumber
begin
set @FunValueStr=@FunValueStr+CONVERT(nvarchar(50),(@i*@FunValue))+','
set @i=@i+1
end
set @FunValueStr=SUBSTRING(@FunValueStr,1,LEN(@FunValueStr)-1)
set @sql='create partition function Fun_'+@TableName+'_'+@ColumnName+'(int)
as range right for values('+@FunValueStr+')'
print @sql+char(13)


--創建分區方案

declare @FileGroupStr nvarchar(max)
set @i=1
set @FileGroupStr=''
while @i<=@PartNumber
begin
set @PartNumberStr=RIGHT('0'+CONVERT(nvarchar,@i),2)
set @FileGroupStr=@FileGroupStr+'[FG_'+@TableName+'_'+@ColumnName+'_'+@PartNumberStr+'],'
set @i=@i+1
end
set @FileGroupStr=SUBSTRING(@FileGroupStr,1,LEN(@FileGroupStr)-1)
set @sql='create partition scheme Sch_'+@TableName+'_'+@ColumnName+' AS
partition Fun_'+@TableName+'_'+@ColumnName+'to('+@FileGroupStr+')'
print  @sql+char(13)


--分區函數的記錄數

set @sql='select $partition.Fun_'+@TableName+'_'+@ColumnName+'('+@ColumnName+') as partition_num,
min('+@ColumnName+') as min_value,max('+@ColumnName+') as max_value,count(1) as record_num
from dbo.'+@TableName+'
group by $partition.Fun_'+@TableName+'_'+@ColumnName+'('+@ColumnName+')
order by $partition.Fun_'+@TableName+'_'+@ColumnName+'('+@ColumnName+');'
print @sql +char(13)






alter database HT_DATA_DISPLAY_2
add filegroup FG_tml_id_1

alter database HT_DATA_DISPLAY_2
add file
(
name=N'FG_tml_updatetime_1_data',
filename=N'f:\sql shili\data\FG_tml_id_1_data.ndf',
size=3mb,
filegrowth=10%
)
to filegroup FG_tml_updatetime_1;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章