• 自動秒收錄
  • 軟件:1973
  • 資訊:57811|
  • 收錄網站:279872|

IT精英團

SQL Server動態生成分區腳本

SQL Server動態生成分區腳本

瀏覽次數:
評論次數:
編輯: 景同
信息來源: ITPUB
更新日期: 2022-09-13 21:44:17
摘要

一、前言前段時間使用表分區比較多,雖然已經寫了SQLServer合并(刪除)分區解惑、SQLServer2005分區模板與實例,但是在實踐中一直感覺修改SQL腳本的時間比較多,一直想抽個時間來把

  • 正文開始
  • 相關閱讀
  • 推薦作品

一、前言

前段時間用表分區比較多。雖然我寫過SQL Server merge (delete)分區消歧,SQL Server 2005分區模板和例子,但總覺得在實踐中花在修改SQL腳本上的時間比較多,總想花時間讓分區腳本動態化。今天,我終于付諸行動了。需要注意的是,以下腳本并不能滿足所有情況。用戶可以根據自己的需求做相應的調整,應該能滿足你的需求。

在SQL Server 2005中,只能使用SQL腳本來創建表分區,而SQL Server 2008中的SSMS已經提供了表分區的操作接口,但是操作也不能生成SQL腳本。因此,以下SQL應用程序場景包括SQL Server 2005和SQL Server 2008。

二、分解

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

這里的分區邊界值是根據int類型遞增計算的。比如你想每100W劃分一次范圍,那么你只需要把@FunValue設置為100 W;如果你的分區邊界值是另一種類型的值或者是不同范圍的分區,那么你只需要把這個變量修改成一個字符串,并相應地修改分區函數的代碼,就可以滿足你的需求了。

通常我們用一個自增的表Id(int)作為分區字段,這樣很容易區分歷史數據,分區操作的隔離性最明顯。

-生成分區腳本。

declare @ databasename nvarchar(50)-數據庫名稱

declare @ tablename nvarchar(50)-表名

聲明@ column name nvarchar(50)-字段名

DECLARE @PartNumber INT -您需要多少個區域?

declare @ location nvarchar(50)-保存分區文件的路徑。

聲明@ Size NVARCHAR(50)-)-分區初始化大小

聲明@ file growth nvarchar(50)-分區文件增量

聲明@FunValue分區間分段值

聲明@i INT

DECLARE @ PartNumberStr NVARCHAR(50)

聲明@sql NVARCHAR(最大值)

-設置以下變量

SET @DataBaseName='MyDataBase '

SET @TableName='User '

SET @ColumnName='Id '

SET @PartNumber=4

SET @Location='E:\DataBase\ '

SET @Size='30MB '

SET @FileGrowth='10% '

SET @FunValue=10000000

-1.創建文件組

SET @i=1

打印'-1。'創建文件組'

WHILE @i=@PartNumber

開始

SET @ PartNumberStr=RIGHT(' 0 ' CONVERT(NVARCHAR,@i),2)

SET @ SQL=' ALTER DATABASE[' @ DataBaseName ']

添加文件組[FG _ ' @ TableName ' _ ' @ column name ' _ ' @ PartNumberStr ']'

PRINT @sql CHAR(13)

SET @i=@i 1

結束

-2.創建文件

SET @i=1

打印字符(13) ' - 2-2。'創建文件'

WHILE @i=@PartNumber

開始

SET @ PartNumberStr=RIGHT(' 0 ' CONVERT(NVARCHAR,@i),2)

SET @ SQL=' ALTER DATABASE[' @ DataBaseName ']

添加文件

(NAME=N ' ' FG _ ' @ TableName ' _ ' @ column NAME ' _ ' @ PartNumberStr ' _ data ' ',FILENAME=N ' ' ' ' @ Location ' FG _ ' @ TableName ' _ ' @ column NAME ' _ ' @ PartNumberStr ' _ data . NDF ' ',SIZE=' @Size ',FILEGROWTH=' @FileGrowth))

TO文件組[FG _ ' @ TableName ' _ ' @ column name ' _ ' @ PartNumberStr '];'

br>PRINT @sql + CHAR(13)
SET @i=@i+1
END


--3.創建分區函數
PRINT CHAR(13)+'--3.創建分區函數'
DECLARE @FunValueStr NVARCHAR(MAX)
SET @i = 1
SET @FunValueStr = ''
WHILE @i < @PartNumber
BEGIN
SET @FunValueStr = @FunValueStr + convert(NVARCHAR(50),(@i*@FunValue)) + ','
SET @i=@i+1
END
SET @FunValueStr = substring(@FunValueStr,1,len(@FunValueStr)-1)
SET @sql = 'CREATE PARTITION FUNCTION
Fun_'+@TableName+'_'+@ColumnName+'(INT) AS
RANGE RIGHT
FOR VALUES('+@FunValueStr+')'
PRINT @sql + CHAR(13)


--4.創建分區方案
PRINT CHAR(13)+'--4.創建分區方案'
DECLARE @FileGroupStr NVARCHAR(MAX)
SET @i = 1
SET @FileGroupStr = ''
WHILE @i <= @PartNumber
BEGIN
SET @PartNumberStr = RIGHT('0' + CONVERT(NVARCHAR,@i),2)
SET @FileGroupStr = @FileGroupStr + '[FG_'+@TableName+'_'+@ColumnName+'_'+@PartNumberStr+'],'
SET @i=@i+1
END
SET @FileGroupStr = substring(@FileGroupStr,1,len(@FileGroupStr)-1)
SET @sql = 'CREATE PARTITION SCHEME
Sch_'+@TableName+'_'+@ColumnName+' AS
PARTITION Fun_'+@TableName+'_'+@ColumnName+'
TO('+@FileGroupStr+')'
PRINT @sql + CHAR(13)


--5.分區函數的記錄數
PRINT CHAR(13)+'--5.分區函數的記錄數'
SET @sql = 'SELECT $PARTITION.Fun_'+@TableName+'_'+@ColumnName+'('+@ColumnName+') AS Partition_num,
MIN('+@ColumnName+') AS Min_value,MAX('+@ColumnName+') AS Max_value,COUNT(1) AS Record_num
FROM dbo.'+@TableName+'
GROUP BY $PARTITION.Fun_'+@TableName+'_'+@ColumnName+'('+@ColumnName+')
ORDER BY $PARTITION.Fun_'+@TableName+'_'+@ColumnName+'('+@ColumnName+');'
PRINT @sql + CHAR(13)

 

生成的腳本如下:

--1.創建文件組
ALTER DATABASE [MyDataBase]
ADD FILEGROUP [FG_User_Id_01]

ALTER DATABASE [MyDataBase]
ADD FILEGROUP [FG_User_Id_02]

ALTER DATABASE [MyDataBase]
ADD FILEGROUP [FG_User_Id_03]

ALTER DATABASE [MyDataBase]
ADD FILEGROUP [FG_User_Id_04]


--2.創建文件
ALTER DATABASE [MyDataBase]
ADD FILE
(NAME = N'FG_User_Id_01_data',FILENAME = N'E:\DataBase\FG_User_Id_01_data.ndf',SIZE = 30MB, FILEGROWTH = 10% )
TO FILEGROUP [FG_User_Id_01];

ALTER DATABASE [MyDataBase]
ADD FILE
(NAME = N'FG_User_Id_02_data',FILENAME = N'E:\DataBase\FG_User_Id_02_data.ndf',SIZE = 30MB, FILEGROWTH = 10% )
TO FILEGROUP [FG_User_Id_02];

ALTER DATABASE [MyDataBase]
ADD FILE
(NAME = N'FG_User_Id_03_data',FILENAME = N'E:\DataBase\FG_User_Id_03_data.ndf',SIZE = 30MB, FILEGROWTH = 10% )
TO FILEGROUP [FG_User_Id_03];

ALTER DATABASE [MyDataBase]
ADD FILE
(NAME = N'FG_User_Id_04_data',FILENAME = N'E:\DataBase\FG_User_Id_04_data.ndf',SIZE = 30MB, FILEGROWTH = 10% )
TO FILEGROUP [FG_User_Id_04];


--3.創建分區函數
CREATE PARTITION FUNCTION
Fun_User_Id(INT) AS
RANGE RIGHT
FOR VALUES(10000000,20000000,30000000)


--4.創建分區方案
CREATE PARTITION SCHEME
Sch_User_Id AS
PARTITION Fun_User_Id
TO([FG_User_Id_01],[FG_User_Id_02],[FG_User_Id_03],[FG_User_Id_04])


--5.分區函數的記錄數
SELECT $PARTITION.Fun_User_Id(Id) AS Partition_num,
MIN(Id) AS Min_value,MAX(Id) AS Max_value,COUNT(1) AS Record_num
FROM dbo.User
GROUP BY $PARTITION.Fun_User_Id(Id)
ORDER BY $PARTITION.Fun_User_Id(Id);

 

三、后記

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

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

 

四、參考文獻

SQL Server 2005 中的分區表和索引



本文來源https://www.cnblogs.com/gaizai/archive/2011/01/14/1935579.html

Velox簡介:一個開源的統一執行引擎
? 上一篇 2022-09-13
SQL SERVER存儲過程學習筆記
下一篇 ? 2022-09-13
  • 如何在Ubuntu中保留文件系統并備份當前開發板鏡像
    0閱讀 0條評論 個贊
    在Ubuntu保留文件系統或者說備份當前開發板鏡像的需求在不斷增加。比如Ubuntu文件系統需要安裝庫文件的話直接使用apt-get工具就可以下載,但由于需要下載的核心板較多,比較費時間,這時需要將安……
  • 國產核心板全志T507助力消防系統升級
    0閱讀 0條評論 個贊
    9月16日下午,位于湖南長沙市區內的中國電信大樓發生火災,建筑高度218米,現場濃煙滾滾,數十層樓體燃燒劇烈。消防救援人員趕到現場后很快將火勢控制住,目前大樓火勢已被撲滅,所幸未發現人員傷亡。湖南電信……
  • 教大家如何處理Spring Boot易流中的用戶和群體!
    0閱讀 0條評論 個贊
    1.準備工作2.用戶操作2.1添加用戶2.2修改用戶2.3刪除用戶2.4查詢用戶3.組操作3.1添加組3.2修改組3.3刪除組3.4查詢組4.查看表詳情雖然說我們在實際開發中,……
  • 從PG15開始WAL壓縮優化
    0閱讀 0條評論 個贊
    PG15傳聞中的超級令人激動的功能大多數跳票了,年初我也寫過一個關于PG15新功能跳票的文章。PG15BETA已經發出幾個月了,似乎PG15里令人激動人心的功能不多,不過從長長的新功能列表里,……
  • 深入了解美團葉子發射器開源方案
    0閱讀 0條評論 個贊
    大家好,我是樹哥。之前我們有聊過「如何設計一個分布式ID發號器」,其中有講過4種解決方案,分別是:UUID類雪花算法數據庫自增主鍵Redis原子自增美團以第2、3種解決方案為基礎,開發出……
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
  • 《2022 分布式數據庫發展趨勢研究報告》的解釋
    9閱讀 0條評論 個贊
    分布式數據庫近年來廣受關注,目前,對分布式數據庫的討論,已經從什么是分布式數據庫,為什么要用分布式數據庫,轉變為怎樣規劃應用分布式數據庫。但分布式數據庫有3條不同的技術路線,這無疑增加了選型難度,到底……
  • 全網最全Linux命令匯總!(史上最全 推薦收藏)
    7閱讀 0條評論 個贊
    今天,給小伙伴們帶來一篇史上最全Linux命令總結的文章,命令有點多,建議小伙伴們先收藏后閱讀。好了,我們開始今天的正文。列出目錄內容ls-a:顯示所有文件(包括隱藏文件);ls-l:顯示詳細……
  • 在i.MX8MP開發板中移植OpenSSL工具
    0閱讀 0條評論 個贊
    飛凌嵌入式OKMX8MP-C開發板采用NXPi.MX8MPlus高性能處理器開發,AI計算能力高達2.3TOPS,可滿足輕量級邊緣計算需求。同時靈活的I/O接口配置和先進豐富的多媒體資源,方便客戶……
  • 人人都能讀懂的源代碼——那些關于DOM的常見鉤子包(二)
    0閱讀 0條評論 個贊
    本文是深入淺出ahooks源碼系列文章的第十五篇,該系列已整理成文檔-地址。覺得還不錯,給個star支持一下哈,Thanks。本篇接著針對關于DOM的各個Hook封裝進行解讀。useFul……
  • 數據庫發展史II-數據倉庫
    6閱讀 0條評論 個贊
    回顧數據倉庫的發展歷程,大致可以將其分為幾個階段:萌芽探索到全企業集成時代、企業數據集成時代、混亂時代--"數據倉庫之父"間的論戰、理論模型確認時代以及數據倉庫產品百家爭鳴時代。數據倉庫理論發展歷程上……
  • 網純原生實現時間單位定時任務執行,未依賴第三方組件
    0閱讀 0條評論 個贊
    常用的定時任務組件有Quartz.Net和Hangfire兩種,這兩種是使用人數比較多的定時任務組件,個人以前也是使用的Hangfire,慢慢的發現自己想要的其實只是一個能夠根據Cron……
  • 2022數字技能職業教育生態研討會
    9閱讀 0條評論 個贊
    職業教育是國民教育體系和人力資源開發的重要組成部分。發展職業教育,已經成為世界各國應對經濟、社會、人口、環境、就業等方面挑戰,實現可持續發展的重要戰略選擇。中國職業教育源遠流長,師徒制教學有著悠久的……
  • i.MX8MQ自制背板無PCIe問題詳解
    9閱讀 0條評論 個贊
    在飛凌嵌入式OKMX8MQ-C開發板上有兩個PCIe接口,對應著兩個PCIe差分時鐘,兩路PCIe分別用作了M.2接口卡槽KEYE(P37)和KEYM(P34)。很多使用FETMX8MQ-C核心板的用……
  • 如何使用spark或hive sql將Excel文件加載到hive表中
    0閱讀 0條評論 個贊
    .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
  • SQL Server表變量和臨時表的區別
    0閱讀 0條評論 個贊
    一、表變量表變量在SQLServer2000中首次被引入。表變量的具體定義包括列定義,列名,數據類型和約束。而在表變量中可以使用的約束包括主鍵約束,唯一約束,NULL約束和CHECK約束(外鍵……
  • 金牛座入門 MVC微服務框架開發教程
    0閱讀 0條評論 個贊
    前言:對于Taurus.MVC的微服務的注冊中心而言:什么樣的應用中心,有權利注冊服務?什么樣的網關中心,有權利調取服務列表?在默認沒有進行相關配置時,只要引用Taurus.MVC的框架,都擁有該權限……
  • spring接口有多個實現類 應該給哪個注入這個依賴?
    0閱讀 0條評論 個贊
    一、問題的描述在實際的系統應用開發中我經常會遇到這樣的一類需求,相信大家在工作中也會經常遇到:同一個系統在多個省份部署。一個業務在北京是一種實現方式,是基于北京用戶的需求。同樣的業務在上海是另外一種實……
  • 三萬字肝爆《數據倉庫體系》
    0閱讀 0條評論 個贊
    文章很長,前言一定要看擁有本篇文章,意味著你擁有一本完善的書籍,本篇文章整理了數據倉庫領域,幾乎所有的知識點,文章內容主要來源于以下幾個方面:源于「數據倉庫交流群」資深數據倉庫工程師的交流討論,如《s……
  • 圖系列中推薦算法的召回與粗排實踐
    3閱讀 0條評論 個贊
    一、轉轉推薦算法介紹1.1什么是推薦系統?1.2轉轉推薦主要場景及流程二、圖算法原理介紹及轉轉實踐2.1經典GraphEmbedding方法:DeepWalk2.2結構性與同質性:node2……
  • 多線程技術的歷史發展和簡單使用
    0閱讀 0條評論 個贊
    進程與線程進程是應用的執行實例,可狹義理解為一個應用程序就是一個進程。啟用一個應用程序時就是啟動了一個進程。該應用運行所需的所有地址空間,代碼,數據及系統資源都屬于此進程。進程所使用的所有資源會在進程……
  • SpringMVC 03: 請求和響應的亂碼解決 + SpringMVC響應Ajax請求
    1閱讀 0條評論 個贊
    請求或響應的中文亂碼問題tomcat9解決了get請求和響應的中文亂碼問題,但是沒有解決post請求或響應的中文亂碼問題tomcat10解決了get和post請求以及響應的中文亂碼問題考慮到實際項目中……
  • 當老板讓我從Java8升級到Java11時
    4閱讀 0條評論 個贊
    老板讓我把一個項目從Java8遷移到Java11,我該怎么辦呢?最簡單的辦法,當然是直接強行升級,遇到一個錯就改一個錯,別看它low,但是對于一個小型且非核心的項目來說,已經足夠了。當然,……
  • 高手面試一個人 問4個問題就夠了
    0閱讀 0條評論 個贊
    作者|Mr.K編輯|Emma來源|技術領導力(ID:jishulingdaoli)金九銀十求職季又要來了。據統計,今年的應屆畢業生已破千萬,加上社會面存量人才,相信今年的人才季的熱度,不會低于今年……
  • Java開源數據庫引擎 數據庫計算封閉的一站式解決方案
    0閱讀 0條評論 個贊
    目錄前言引入一、數據庫封閉性帶來的問題?問題1:ETL變成ELT甚至LETETL:ELT:問題2:中間表帶來的資源消耗和耦合問題3:多樣性數據源問題4:存儲過程帶來的安全和耦合問題問題5:大……
  • [設計模式] Java設計模式-工廠模式
    3閱讀 0條評論 個贊
    目錄【設計模式】Java設計模式-工廠模式簡介1、普通工廠(SimpleFactory)模式①、定義類②、定義簡單的工廠類③、實例2、抽象工廠(AbstractFactory)模式①、定義類②、……
最近發布資訊
更多
十八禁试看120秒做受