国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

SQL Server如何動態生成分區腳本

數據庫 SQL Server
在SQL Server 2005中只能通過SQL腳本來創建表分區,而在SQL Server 2008的SSMS中已經提供了操作界面進行表分區,但是也不能把操作生成SQL腳本,所以,下面的SQL的應用場景包括SQL Server 2005、SQL Server 2008。

一、前言

前段時間使用表分區比較多,雖然已經寫了解惑:對SQL Server分區進行合并(刪除)、SQL Server 2005 分區模板與實例,但是在實踐中一直感覺修改SQL腳本的時間比較多,一直想抽個時間來把分區腳本進行動態化,今天終于付之于行動了。需要說明的一點,下面的腳本并不能滿足所有情況,用戶可以根據自己的需要進行相應的調整,應該可以滿足你的需求的。

在SQL Server 2005中只能通過SQL腳本來創建表分區,而在SQL Server 2008的SSMS中已經提供了操作界面進行表分區,但是也不能把操作生成SQL腳本,所以,下面的SQL的應用場景包括SQL Server 2005、SQL Server 2008。

二、分解

下面就是生成分區的腳本了,在執行之前,你需要填寫數據庫名稱、表名、分區表字段、需要的分區數、保存分區文件的路徑、分區初始化大小、分區文件的增量、分區邊界值;

這 里的分區邊界值是按照int類型進行增量計算的,比如你想以每100W進行范圍分區的話,那你只要設置@FunValue為100W;如果你的分區邊界值 是其它類型值或者是不等范圍的分區,那么你只要修改這個變量為字符串,并對分區函數的生成代碼進行相應修改就可以滿足你的需求了。

通常情況下,我們會以一個表Id(int),并且是自增作為分區字段,這樣就很容易區分歷史數據了,而且對分區的操作隔離也是最明顯的。

  1. --生成分區腳本 
  2. DECLARE @DataBaseName NVARCHAR(50)--數據庫名稱 
  3. DECLARE @TableName NVARCHAR(50)--表名稱 
  4. DECLARE @ColumnName NVARCHAR(50)--字段名稱 
  5. DECLARE @PartNumber INT--需要分多少個區 
  6. DECLARE @Location NVARCHAR(50)--保存分區文件的路徑 
  7. DECLARE @Size NVARCHAR(50)--分區初始化大小 
  8. DECLARE @FileGrowth NVARCHAR(50)--分區文件增量 
  9. DECLARE @FunValue INT--分區分段值 
  10. DECLARE @i INT 
  11. DECLARE @PartNumberStr NVARCHAR(50) 
  12. DECLARE @sql NVARCHAR(max
  13.  
  14.  
  15. --設置下面變量 
  16. SET @DataBaseName = 'MyDataBase' 
  17. SET @TableName = 'User' 
  18. SET @ColumnName = 'Id' 
  19. SET @PartNumber = 4 
  20. SET @Location = 'E:\DataBase\' 
  21. SET @Size = '30MB' 
  22. SET @FileGrowth = '10%' 
  23. SET @FunValue = 10000000
  1. --1.創建文件組 
  2. SET @i = 1 
  3. PRINT '--1.創建文件組' 
  4. WHILE @i <= @PartNumber 
  5. BEGIN 
  6.     SET @PartNumberStr = RIGHT('0' + CONVERT(NVARCHAR,@i),2) 
  7.     SET @sql = 'ALTER DATABASE ['+@DataBaseName +'] 
  8. ADD FILEGROUP [FG_'+@TableName+'_'+@ColumnName+'_'+@PartNumberStr+']' 
  9.     PRINT @sql + CHAR(13) 
  10.     SET @i=@i+1 
  11. END 
  12.  
  13.  
  14. --2.創建文件 
  15. SET @i = 1 
  16. PRINT CHAR(13)+'--2.創建文件' 
  17. WHILE @i <= @PartNumber 
  18. BEGIN 
  19.     SET @PartNumberStr = RIGHT('0' + CONVERT(NVARCHAR,@i),2) 
  20.     SET @sql = 'ALTER DATABASE ['+@DataBaseName +'] 
  21. ADD FILE 
  22. (NAME = N''FG_'+@TableName+'_'+@ColumnName+'_'+@PartNumberStr+'_data'',FILENAME = N'''+@Location+'FG_'+@TableName+'_'+@ColumnName+'_'+@PartNumberStr+'_data.ndf'',SIZE = '+@Size+', FILEGROWTH = '+@FileGrowth+' ) 
  23. TO FILEGROUP [FG_'+@TableName+'_'+@ColumnName+'_'+@PartNumberStr+'];' 
  24.     PRINT @sql + CHAR(13) 
  25.     SET @i=@i+1 
  26. END 
  27.  
  28. --3.創建分區函數 
  29. PRINT CHAR(13)+'--3.創建分區函數' 
  30. DECLARE @FunValueStr NVARCHAR(MAX
  31. SET @i = 1 
  32. SET @FunValueStr = '' 
  33. WHILE @i < @PartNumber 
  34. BEGIN 
  35.     SET @FunValueStr = @FunValueStr + convert(NVARCHAR(50),(@i*@FunValue)) + ',' 
  36.     SET @i=@i+1 
  37. END 
  38. SET @FunValueStr = substring(@FunValueStr,1,len(@FunValueStr)-1) 
  39. SET @sql = 'CREATE PARTITION FUNCTION 
  40. Fun_'+@TableName+'_'+@ColumnName+'(INTAS 
  41. RANGE RIGHT 
  42. FOR VALUES('+@FunValueStr+')' 
  43. PRINT @sql + CHAR(13)  
  44.  
  45. --4.創建分區方案 
  46. PRINT CHAR(13)+'--4.創建分區方案' 
  47. DECLARE @FileGroupStr NVARCHAR(MAX
  48. SET @i = 1 
  49. SET @FileGroupStr = '' 
  50. WHILE @i <= @PartNumber 
  51. BEGIN 
  52.     SET @PartNumberStr = RIGHT('0' + CONVERT(NVARCHAR,@i),2) 
  53.     SET @FileGroupStr = @FileGroupStr + '[FG_'+@TableName+'_'+@ColumnName+'_'+@PartNumberStr+'],' 
  54.     SET @i=@i+1 
  55. END 
  56. SET @FileGroupStr = substring(@FileGroupStr,1,len(@FileGroupStr)-1) 
  57. SET @sql = 'CREATE PARTITION SCHEME 
  58. Sch_'+@TableName+'_'+@ColumnName+' AS 
  59. PARTITION Fun_'+@TableName+'_'+@ColumnName+' 
  60. TO('+@FileGroupStr+')' 
  61. PRINT @sql + CHAR(13) 
  62.  
  63. --5.分區函數的記錄數 
  64. PRINT CHAR(13)+'--5.分區函數的記錄數' 
  65. SET @sql = 'SELECT $PARTITION.Fun_'+@TableName+'_'+@ColumnName+'('+@ColumnName+') AS Partition_num, 
  66.  MIN('+@ColumnName+'AS Min_value,MAX('+@ColumnName+'AS Max_value,COUNT(1) AS Record_num 
  67. FROM dbo.'+@TableName+' 
  68. GROUP BY $PARTITION.Fun_'+@TableName+'_'+@ColumnName+'('+@ColumnName+'
  69. ORDER BY $PARTITION.Fun_'+@TableName+'_'+@ColumnName+'('+@ColumnName+');' 
  70. PRINT @sql + CHAR(13) 

生成的腳本如下:

  1. --1.創建文件組 
  2. ALTER DATABASE [MyDataBase] 
  3. ADD FILEGROUP [FG_User_Id_01] 
  4. ALTER DATABASE [MyDataBase] 
  5. ADD FILEGROUP [FG_User_Id_02] 
  6. ALTER DATABASE [MyDataBase] 
  7. ADD FILEGROUP [FG_User_Id_03] 
  8. ALTER DATABASE [MyDataBase] 
  9. ADD FILEGROUP [FG_User_Id_04] 
  10.  
  11. --2.創建文件 
  12. ALTER DATABASE [MyDataBase] 
  13. ADD FILE 
  14. (NAME = N'FG_User_Id_01_data',FILENAME = N'E:\DataBase\FG_User_Id_01_data.ndf',SIZE = 30MB, FILEGROWTH = 10% ) 
  15. TO FILEGROUP [FG_User_Id_01]; 
  16. ALTER DATABASE [MyDataBase] 
  17. ADD FILE 
  18. (NAME = N'FG_User_Id_02_data',FILENAME = N'E:\DataBase\FG_User_Id_02_data.ndf',SIZE = 30MB, FILEGROWTH = 10% ) 
  19.  
  20. TO FILEGROUP [FG_User_Id_02]; 
  21. ALTER DATABASE [MyDataBase] 
  22. ADD FILE 
  23. (NAME = N'FG_User_Id_03_data',FILENAME = N'E:\DataBase\FG_User_Id_03_data.ndf',SIZE = 30MB, FILEGROWTH = 10% ) 
  24. TO FILEGROUP [FG_User_Id_03]; 
  25. ALTER DATABASE [MyDataBase] 
  26. ADD FILE 
  27. (NAME = N'FG_User_Id_04_data',FILENAME = N'E:\DataBase\FG_User_Id_04_data.ndf',SIZE = 30MB, FILEGROWTH = 10% ) 
  28. TO FILEGROUP [FG_User_Id_04]; 
  29.  
  30. --3.創建分區函數 
  31. CREATE PARTITION FUNCTION 
  32. Fun_User_Id(INTAS 
  33.  
  34. RANGE RIGHT 
  35. FOR VALUES(10000000,20000000,30000000) 
  36.  
  37. --4.創建分區方案 
  38. CREATE PARTITION SCHEME 
  39. Sch_User_Id AS 
  40. PARTITION Fun_User_Id 
  41. TO([FG_User_Id_01],[FG_User_Id_02],[FG_User_Id_03],[FG_User_Id_04]) 
  42.  
  43. --5.分區函數的記錄數 
  44. SELECT $PARTITION.Fun_User_Id(Id) AS Partition_num, 
  45.  MIN(Id) AS Min_value,MAX(Id) AS Max_value,COUNT(1) AS Record_num 
  46. FROM dbo.User 
  47. GROUP BY $PARTITION.Fun_User_Id(Id) 
  48. ORDER BY $PARTITION.Fun_User_Id(Id); 

三、后記

在MSND的SQL Server 2005中的分區表和索引中同樣提供了一個腳本用于生成表分區,和他不同的是:他采用了表來保存文件路徑,再使用游標來創建文件而已,其實這只能生成一部分代碼,而我的腳本不同之處就是能***限度的生成常規表分區的常用代碼,方便快捷很多。有興趣的童鞋可以去下載。

上面使用表保存信息的這種想法在后期的數據搬遷(比如需要對一個現有的表進行表分區,這種情況下通常會先建一個分區表,再進行導入現有表的數據)中是有很大的用處的,后面的文章中會講講如何進行自動化的數據搬遷,敬請留意。

原文鏈接:http://www.cnblogs.com/gaizai/archive/2011/01/14/1935579.html

【編輯推薦】

  1. SQL Server復災 你懂了嗎?
  2. SQL Server管理 這些你懂嗎?
  3. 客戶的一次疏忽,DBA的一次噩夢
  4. 單數據庫vs多數據庫,單實例vs多實例 效率測試
  5. 關于Update在不同數據庫的使用
責任編輯:艾婧 來源: 聽風吹雨餓博客
相關推薦

2009-05-31 09:25:03

SQL Server腳本數據庫管理

2010-09-13 11:09:34

SQL SERVER分

2010-11-10 14:47:11

SQL Server創

2010-09-16 15:56:15

SQL Server表

2020-06-19 12:59:33

動態腳本Java

2011-07-06 13:09:11

SQL Server

2011-03-21 10:13:31

Sql Server數分區

2010-11-10 14:35:17

SQL Server創

2013-05-20 16:09:39

SQL Server

2010-08-05 09:07:24

2010-11-12 13:08:36

動態sql語句

2010-05-13 10:00:10

SQL Server

2015-07-20 17:05:38

SQL ServerNULL值

2010-06-30 16:58:24

SQL Server分

2011-07-04 14:28:18

SQL Server分區

2010-07-21 15:01:09

SQL Server

2010-11-08 09:59:22

SQL Server動

2011-03-29 15:27:26

SQL Server 動態管理

2024-01-30 08:01:22

MySQL數據庫分組排序

2010-07-21 14:55:48

SQL Server
點贊
收藏

51CTO技術棧公眾號

久久久精品欧美| 91精品国产自产在线老师啪 | 欧美日韩亚洲丝袜制服| 亚洲最大av在线| caopon在线免费视频| 成人网18免费看| 在线高清欧美| 午夜精品福利一区二区三区av | 蜜臀91精品一区二区三区| 欧美一级搡bbbb搡bbbb| 日韩亚洲欧美视频| 日韩激情在线| 久久精品福利视频| 91网页在线观看| 国产肉丝袜一区二区| 精品伊人久久大线蕉色首页| 三级电影一区| 欧美成人合集magnet| 美女91在线| 日韩欧美亚洲综合| 黄色动漫网站入口| 丝袜脚交一区二区| 国产精品一区电影| 澳门成人av| 中文字幕一区日韩电影| 亚洲乱亚洲乱妇| 亚洲福中文字幕伊人影院| 狠狠精品干练久久久无码中文字幕 | 欧美极品少妇xxxxⅹ免费视频 | 欧美xxxxxxxx| 在线观看中文字幕的网站| 久久久久久久久蜜桃| 国产亚洲精品美女久久久m| 婷婷精品视频| 久久久亚洲影院你懂的| 久久草在线视频| 精品国产一区二区三区在线观看 | 久久精品一区二区三区不卡| 亚洲狠狠婷婷综合久久久| 日韩av中文字幕一区二区三区| 国产精品高潮粉嫩av| 欧美精品影院| 91精品国产综合久久国产大片| 成人高清免费| 午夜精品福利一区二区蜜股av| 国产专区一区二区三区| 伦理一区二区| 国产香蕉精品视频一区二区三区| 麻豆mv在线看| 久久久久久九九九| 亚洲精品无吗| 成人黄色av网| 久久国产主播| 日本中文字幕网址| 亚洲国产一区二区a毛片| 久久久久久久片| 1313精品午夜理伦电影| 国产精品pans私拍| 精品91在线| 超碰10000| 亚洲激情中文1区| 黄页在线播放| 欧美日韩性生活视频| av在线视屏| 欧美日韩国产成人| 国产成人黄色| 国产尤物99| 中文字幕av资源一区| 不卡在线视频| 97在线视频免费看| 日韩二区三区在线观看| 欧美一区国产一区| 免费成人在线观看| 国产精品第157页| 欧美日韩精品专区| www欧美在线观看| av一区二区三区免费| 久久久久亚洲综合| 在线中文字幕-区二区三区四区| 欧美成人全部免费| 日韩精品一卡二卡三卡四卡无卡| 日韩中文字幕二区| 精品呦交小u女在线| 伊人久久久大香线蕉综合直播| 欧美一区二区视频在线播放| 在线观看日韩毛片| 九九热爱视频精品视频| 91手机视频在线| 欧美日韩精品一区二区三区蜜桃| 91蝌蚪精品视频| 裸模一区二区三区免费| av男人一区| 欧美18视频| 在线免费视频一区二区| 白嫩白嫩国产精品| av在线播放天堂| 欧美精品一区二区三区久久久| 午夜免费一区| 黄色av网站在线免费观看| 国产va免费精品高清在线观看| 欧美视频网站| 久久精品国产亚洲a∨麻豆| 成人精品一区二区三区电影黑人| 国产91丝袜在线播放| 国产高清免费av在线| 日韩免费视频在线观看| 国产亚洲成年网址在线观看| 欧美一区二区中文字幕| 国产96在线亚洲| 91精品国产色综合久久ai换脸| 国产在线一区不卡| 黄色大片中文字幕| www.欧美精品| 亚洲最大成人网4388xx| 欧美性久久久| 美女扒开腿让男人桶爽久久软| 佐佐木明希av| 日韩中文字幕在线看| 国产精品国产三级国产专播品爱网| 日韩免费大片| 一区二区三区区四区播放视频在线观看| 欧美成人一区二区| 香蕉久久夜色精品国产使用方法| 最新av中文字幕| 99久久一区三区四区免费| 亚洲精品成a人在线观看| 国产情人综合久久777777| 国产区精品区| 玛雅亚洲电影| 老司机性视频| 奇米888一区二区三区| xxxxx成人.com| 色综合视频一区二区三区高清| 奇米影视一区二区三区| 奇米777日韩| 春暖花开成人亚洲区| 狠狠热免费视频| 在线观看亚洲视频啊啊啊啊| 国产欧美婷婷中文| 日韩欧美激情四射| 欧美性xxxxxxx| 亚洲一级不卡视频| 蜜桃av一区二区三区电影| 成人综合日日夜夜| 成入视频在线观看| 妞干网在线观看| 成人毛片一区二区| 精品久久精品久久| 高清国语自产拍免费一区二区三区| 亚洲欧美国产视频| 欧美三级韩国三级日本一级| 黄色成人在线播放| 亚洲成人资源网| 亚洲一级二级在线| 久久久精品免费网站| 99精品国产91久久久久久| 亚洲一区亚洲| 欧美人与拘性视交免费看| 97久久综合精品久久久综合| xx欧美视频| 人人爱人人干婷婷丁香亚洲| 欧美黄色视屏| 亚洲人成影视在线观看| 亚洲最大福利网| 操人视频欧美| 国产伦精品一区二区| 亚洲a在线播放| 亚洲aaa激情| 国产精品视频白浆免费视频| 欧美孕妇与黑人孕交| 国产日韩欧美中文| 欧美一级bbbbb性bbbb喷潮片| 日韩一区视频在线| 日韩精品欧美激情| 欧美美女黄视频| 色综合夜色一区| 日韩写真欧美这视频| 激情懂色av一区av二区av| 亚洲国产精品久久久久秋霞影院| 国产一区视频导航| 成人短视频下载| 国产亚洲欧美中文| 一区二区三区高清| 欧美男人的天堂一二区| 久久久999国产| 国产精品久久久一区| 国外成人免费在线播放| 3d蒂法精品啪啪一区二区免费| 一区二区在线观看网站| 成人午夜天堂| 偷拍25位美女撒尿视频在线观看| fc2ppv国产精品久久| 七七成人影院| 成人片免费看| 欧美女优在线视频| 国产一区二区三区蝌蚪| 99精品欧美一区二区三区小说 | 1024日韩| 亚洲国产精品一区二区久久| 午夜久久久影院|