首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

SQL Server 更換分區欄位:Shell 腳本自動化重建分區表流程

     編輯:程式設計疑難解答

需求:表已以欄位 `a1` 分區,欲改用同型別欄位 `a2` 分區。SQL Server **不支援直接 ALTER PARTITION FUNCTION 更換欄位**,必須重建。

自動化重建流程 (Shell/PowerShell + sqlcmd)

#!/bin/bash
# 參數
DB="MyDB"
TABLE="BigTable"
OLD_COL="a1"
NEW_COL="a2"
FG="PRIMARY"   # 目標檔案群組

# 1. 腳本產生 T-SQL
cat > /tmp/repartition.sql <

關鍵細節

  • `SELECT * INTO ... WHERE 1=0` 快速複製結構 (含身分識別、預設值、CHECK),但 **不複製索引/FK**,需手動補齊。
  • 大表資料複製階段可加 `WITH (TABLOCK)` 並分批 `INSERT TOP (100000) ...` 避免記錄體膨脹。
  • 分區函數 `RANGE RIGHT` 邊界值依業務調整 (年/月/季)。
  • 整個過程需獨佔鎖,安排維護窗口執行。

驗證

SELECT 
    OBJECT_NAME(object_id) AS TableName,
    name AS IndexName,
    type_desc,
    data_space_id
FROM sys.indexes
WHERE object_id = OBJECT_ID('BigTable');
-- 應顯示叢集索引 data_space_id 對應 PS_a2

用 Shell 腳本包裝 T-SQL 交易,可一鍵完成「複製結構→搬資料→重建分區→切換表名」,並具備失敗回滾能力,適合納入 CI/CD 流程自動化執行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved