创建分区的SP和job

  1. 创建SP

点击(此处)折叠或打开

  1. create procedure sp_maintain_partion_fg (
  2. @tableName varchar(50),
  3. @inputdate datetime
  4. )
  5. as begin
  6. declare
  7. @fileGroupName varchar(50),
  8. @ndfName varchar(50),
  9. @newNameStr varchar(50),
  10. @fullPath varchar(50),
  11. @newDay varchar(50),
  12. @oldDay datetime,
  13. @partFunName varchar(50),
  14. @schemeName varchar(50),
  15. @sqlstr varchar(1000),
  16. @sql1 varchar(4000)


  17. --set @tableName='DYDB'
  18. set @newDay=CONVERT(varchar(10),DATEADD(mm, DATEDIFF(mm,0,@inputdate), 0), 23 )--CONVERT(varchar(100), @inputdate, 23)--23:按天 114:按时间
  19. set @oldDay=cast(CONVERT(varchar(10),DATEADD(mm, DATEDIFF(mm,0,@inputdate)-1, 0), 112 ) as datetime)
  20. set @newNameStr=left(Replace(Replace(@newDay,':','_'),'-','_'),7)
  21. set @fileGroupName=N'G'+@newNameStr
  22. set @ndfName=N'F'+@newNameStr+''
  23. set @fullPath=N'F:\\SQLData\\ecodata\\'+@ndfName+'.ndf'
  24. set @partFunName=N'pf_Time'
  25. set @schemeName=N'ps_Time'


  26. --print @fullPath
  27. --print @fileGroupName
  28. --print @ndfName




  29. --创建文件组
  30. if exists(select * from sys.filegroups where name=@fileGroupName)
  31. begin
  32. print '文件组存在,不需添加'
  33. end
  34. else
  35. begin
  36. exec('ALTER DATABASE '+@tableName+' ADD FILEGROUP ['+@fileGroupName+']')
  37. --print 'exec '+('ALTER DATABASE '+@tableName+' ADD FILEGROUP ['+@fileGroupName+']')
  38. print '新增文件组'
  39. if exists(select * from sys.partition_schemes where name =@schemeName)
  40. begin
  41. exec('alter partition scheme '+@schemeName+' next used ['+@fileGroupName+']')
  42. --print 'exec '+('alter partition scheme '+@schemeName+' next used ['+@fileGroupName+']')
  43. print '修改分区方案'
  44. end


  45. print 'exec '+('alter partition scheme '+@schemeName+' next used ['+@fileGroupName+']')
  46. print '修改分区方案'


  47. if exists(select * from sys.partition_range_values where function_id=(select function_id from
  48. sys.partition_functions where name =@partFunName) and value=@oldDay)
  49. begin
  50. exec('alter partition function '+@partFunName+'() split range('''+@newDay+''')')
  51. --print 'exec '+('alter partition function '+@partFunName+'() split range('''+@newDay+''')')
  52. print '修改分区函数'
  53. end
  54. end


  55. --创建NDF文件
  56. if exists(select * from sys.database_files where [state]=0 and (name=@ndfName or physical_name=@fullPath))
  57. begin
  58. print 'ndf文件存在,不需添加'
  59. end
  60. else
  61. begin
  62. exec('ALTER DATABASE '+@tableName+' ADD FILE (NAME ='+@ndfName+',FILENAME = '''+@fullPath+''')TO FILEGROUP ['+@fileGroupName+']')
  63. print 'ALTER DATABASE '+@tableName+' ADD FILE (NAME ='+@ndfName+',FILENAME = '''+@fullPath+''')TO FILEGROUP ['+@fileGroupName+']'


  64. print '新创建ndf文件'
  65. end
  66. --/*--------------------以上创建数据库的文件组和物理文件------------------------*/
  67. end




  68. ----分区函数
  69. --if exists(select * from sys.partition_functions where name =@partFunName)
  70. --begin
  71. --print '此处修改需要在修改分区函数之前执行'
  72. --end
  73. --else
  74. --begin
  75. --exec('CREATE PARTITION FUNCTION '+@partFunName+'(DateTime)AS RANGE RIGHT FOR VALUES ('''+@newDay+''')')
  76. ----print 'CREATE PARTITION FUNCTION '+@partFunName+'(DateTime)AS RANGE RIGHT FOR VALUES ('''+@newDay+''')'
  77. --print '新创建分区函数'
  78. --end
  79. ----分区方案
  80. --if exists(select * from sys.partition_schemes where name =@schemeName)
  81. --begin
  82. --print '此处修改需要在修改分区方案之前执行'
  83. --end
  84. --else
  85. --begin
  86. --exec('CREATE PARTITION SCHEME '+@schemeName+' AS PARTITION '+@partFunName+' TO (''PRIMARY'','''+@fileGroupName+''')')
  87. ----print ('CREATE PARTITION SCHEME '+@schemeName+' AS PARTITION '+@partFunName+' TO (''PRIMARY'','''+@fileGroupName+''')')
  88. --print '新创建分区方案'
2. 增加job

点击(此处)折叠或打开

  1. declare @date date
  2. set @date= DATEADD(mm,1,getdate())
  3. print @date
  4. exec sp_maintain_partion_fg 'ecodata',@date

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16131092/viewspace-2140648/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16131092/viewspace-2140648/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值