DEFINITIONS

Definitions More Info.
Definition ID796
TitleSQL
CategoryNOTES
DefinitionOtomatik partition Kaldirma-Remove MONTH Bazinda
Definition Description-- Mevcuttaki partition siler.
DECLARE @dbname nvarchar(100), --database adı
@tableName nvarchar(100), -- partition yapılacak tablo adı
@year int, -- Partition başlangıç yılı
@month int, -- kaç MONTH lık partition yapmak istiyorsunuz. Doğal olarak 12 ANCAK artık ayla beraber 13.
--Artık MONTH, sql normalde MONTHT'ly partition yapacağım dediğiniz zaman, 12. MONTH ek son yeni yılın ilk ayından 1 gün ekler.
@totalPartYear int, -- Partition yapılacak toplam yıl sayısı. Kaç yıllık veriyi partitionlamak istiyorsunuz.
-- NOT: Programlama dilinde 0 başlangıç sayısıdır.
@loopNumA int, -- döngü içinde, başlangıç yılını kaçar kaçar arttıralım.
@filename nvarchar(500), -- Partition dosyalarının ekleneceği dosya dizini (path)
@initialsize int, -- Dosyanın başlangıç boyutu.
@filegrowth int, -- Dosyanın otomatik büyüme boyutu
@sql nvarchar(MAX), -- Partition dynamic sql içeren sorgu komutu
@sqlDropSchemeFnc nvarchar(2000) -- Partition Scheme ve Partition Function drop eden sql komutu
SET @dbname = 'TEST'
SET @tableName = 'prItemBarcode'
SET @year = 2016
SET @filename ='D:\MSSQLSERVER\USERDATA\'
SET @initialsize = 100
SET @filegrowth = 10
SET @totalPartYear = 1 -- Eğer Partition Scheme ve function varsa drop eder. Bu objeler drop olmadan partition dosyalarını drop edemezsiniz.
SET @sqlDropSchemeFnc = +'IF EXISTS(SELECT [name] FROM '+@dbname+'.sys.partition_functions)'
+char(13)+char(10)
+'DROP PARTITION FUNCTION pfnc_'+@tablename
+char(13)+char(10)
+'GO'
+char(13)+char(10)
+'IF EXISTS(SELECT [name] FROM '+@dbname+'.sys.partition_schemes)'
+char(13)+char(10)
+'DROP PARTITION SCHEME pscheme_'+@tableName
PRINT(@sqlDropSchemeFnc) -- İlk döngü yıl sayısını arttırır
SET @loopNumA=0
WHILE (@loopNumA <=@totalPartYear)
BEGIN -- içerideki döngü ay sayısına bağlı artış sağlar
SET @month = 1
WHILE (@month<=12)
BEGIN
SET @sql='USE '+@dbname
+char(13)+char(10)
+'GO'
+char(13)+char(10)
+'ALTER DATABASE '+@dbname+' REMOVE FILE ['+@tableName+'F_'+CAST(@year+@loopNumA AS NVARCHAR(4))+'MONTH'+RIGHT(100+CAST(@month AS NVARCHAR(2)),2)+']'
+char(13)+char(10)
+'GO'+char(13)+char(10)
+'ALTER DATABASE '+@dbname+' REMOVE FILEGROUP ['+@tableName+'G'+'_'+CAST(@year+@loopNumA AS NVARCHAR(4))+'MONTH'+RIGHT(100+CAST(@month AS NVARCHAR(2)),2)+']'
+char(13)+char(10)
+'GO'+char(13)+char(10)
SET @month = @month+1 print(@sql) -- son döngüde yani 12. aya gelirsek, artık ay eklemek için aşağıdaki döngüye gireriz.
IF ((@loopNumA = @totalPartYear) AND @month = 13)
BEGIN
SET @loopNumA = @loopNumA + 1
SET @month = 1
SET @sql='USE '
+@dbname +char(13)+char(10)
+'GO'+char(13)+char(10)
+'ALTER DATABASE ['+@dbname+'] REMOVE FILE ['+@tableName+'F_'+CAST(@year+@loopNumA AS NVARCHAR(4))+'MONTH'+RIGHT(100+CAST(@month AS NVARCHAR(2)),2)+']'
+char(13)+char(10)
+'GO'
+char(13)+char(10)
+'ALTER DATABASE ['+@dbname+'] REMOVE FILEGROUP ['+@tableName+'G'+'_'+CAST(@year+@loopNumA AS NVARCHAR(4))+'MONTH'+RIGHT(100+CAST(@month AS NVARCHAR(2)),2)+']'
+char(13)+char(10)
+'GO'
+char(13)+char(10)
print(@sql)
RETURN
END
END
SET @loopNumA = @loopNumA + 1
END
DROP PARTITION FUNCTION [pfnc_prItemBarcode]
RecordBycunay
Record Date12-09-2017 13:44:46
Düzenle
Kopyala
Sil