DEFINITIONS

Definitions More Info.
Definition ID798
TitleSQL
CategoryNOTES
DefinitionPartition Kaldirma-Remove For QUARTER
Definition Description-- Mevcuttaki Quarter partition siler.
DECLARE @dbname nvarchar(100), --database adı
@tableName nvarchar(100), -- partition yapılacak tablo adı
@year int, -- Partition başlangıç yılı
@quarter int, -- kaç QUARTER partition yapmak istiyorsunuz. Normalde 4 QUARTER olacağı için.
--Artık quarter, sql normalde QUARTER partition yapacağım dediğiniz zaman, 4.quarterdan sonra yeni yılın Quarterına geçiş olur.
@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 @quarter = 1
WHILE (@quarter<=4)
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))+'QUARTER'+RIGHT(100+CAST(@quarter 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))+'QUARTER'+RIGHT(100+CAST(@quarter AS NVARCHAR(2)),2)+']'
+char(13)+char(10)
+'GO'
+char(13)+char(10)
SET @quarter = @quarter+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 @quarter = 5)
BEGIN SET @loopNumA = @loopNumA + 1
SET @quarter = 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))+'QUARTER'+RIGHT(100+CAST(@quarter 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))+'QUARTER'+RIGHT(100+CAST(@quarter 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 14:16:59
Düzenle
Kopyala
Sil