-- 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]