本文介紹了自動(dòng)在不同的文件組中創(chuàng)建索引,編輯發(fā)布配置文件腳本的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我需要一種方法來(lái)自動(dòng)將聚集索引移動(dòng)到一個(gè)文件組:ClusteredFilegroup,并在創(chuàng)建DDL時(shí)將所有非聚集索引移動(dòng)到不同的文件組NonClusteredFilegroup。我們有SQL發(fā)布配置文件,它在每周部署下面創(chuàng)建類似的腳本。我如何利用PowerShell進(jìn)行此操作?
我想讓PowerShell添加單詞
ON [ClusteredFilegroup]
每次創(chuàng)建表后
或ON [NonClusteredFilegroup]
用于每個(gè)非聚集索引。
PowerShell應(yīng)該能夠讀取原始腳本(testscript.sql),并對(duì)其運(yùn)行文本編輯。
原始腳本:
GO
CREATE TABLE [dbo].[Dim_Product] (
[DimProductId] INT IDENTITY (1, 1) NOT NULL,
[ProductName] VARCHAR(64) NOT NULL,
[ProductDescription] VARCHAR(64) NOT NULL,
[BeginDate] DATETIME NOT NULL,
[EndDate] DATETIME NOT NULL,
CONSTRAINT [PK_DimProductId] PRIMARY KEY CLUSTERED ([DimProductId] ASC)
);
GO
CREATE NONCLUSTERED INDEX [NCX_Product_ProductName]
ON [dbo].[Dim_Product]([ProductName] ASC);
GO
CREATE NONCLUSTERED INDEX [NCX_Product_BeginDate]
ON [dbo].[Dim_Product]([BeginDate] ASC);
GO
CREATE TABLE [dbo].[Dim_Customer] (
[DimCustomertId] INT IDENTITY (1, 1) NOT NULL,
[CustomerName] VARCHAR(64) NOT NULL,
[CustomerDescription] VARCHAR(64) NOT NULL,
[BeginDate] DATETIME NOT NULL,
[EndDate] DATETIME NOT NULL,
CONSTRAINT [PK_DimCustomerId] PRIMARY KEY CLUSTERED ([DimCustomerId] ASC)
);
GO
CREATE NONCLUSTERED INDEX [NCX_Customer_CustomerName]
ON [dbo].[Dim_Customer]([CustomerName] ASC);
GO
CREATE NONCLUSTERED INDEX [NCX_Customer_BeginDate]
ON [dbo].[Dim_Customer]([BeginDate] ASC);
目標(biāo):
CREATE TABLE [dbo].[Dim_Product] (
[DimProductId] INT IDENTITY (1, 1) NOT NULL,
[ProductName] VARCHAR(64) NOT NULL,
[ProductDescription] VARCHAR(64) NOT NULL,
[BeginDate] DATETIME NOT NULL,
[EndDate] DATETIME NOT NULL,
CONSTRAINT [PK_DimProductId] PRIMARY KEY CLUSTERED ([DimProductId] ASC)
) ON [ClusteredFilegroup];
GO
CREATE NONCLUSTERED INDEX [NCX_Product_ProductName]
ON [dbo].[Dim_Product]([ProductName] ASC) ON [NonClusteredFilegroup];
我正在嘗試研究這些腳本:
Add text to every line in text file using PowerShell
Search a text file for specific word if found copy the entire line to new file in powershell
https://dba.stackexchange.com/questions/229380/automatically-have-nonclustered-indexes-in-a-different-filegroup/229382#229382
推薦答案
這應(yīng)該會(huì)起作用:
$sql = Get-Content .org.sql -Raw
$sql = $sql -replace '(?smi)(CREATE TABLE (.*?)));','$1 ) ON [ClusteredFilegroup];'
$sql = $sql -replace '(?smi)(CREATE NONCLUSTERED INDEX (.*?)));','$1) ON [NonClusteredFilegroup];'
$sql | Set-Content -Path .
ew.sql
(?smi)
告訴REPLACE語(yǔ)句匹配多行(M),并包括新行和Ignore Case(I)。
(.*?)
包括任何內(nèi)容,包括換行符(因此(?smi)
),但不包括貪婪(?
)。
這篇關(guān)于自動(dòng)在不同的文件組中創(chuàng)建索引,編輯發(fā)布配置文件腳本的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,