Powershell:删除SQL发布配置文件行索引

时间:2019-05-14 21:18:06

标签: sql-server regex powershell sql-server-2017 powershell-ise

我想使用PowerShell(可能是Regex)从脚本中删除非聚集索引。背景:我们数据库中有很多数据,并且希望防止1个小时的索引创建时间来创建或更改非聚集索引。如何使用PowerShell进行此操作? PowerShell将采用输入脚本并进行相应的编辑。

发布配置文件脚本:

Create table dbo.Test(TestId int, ColumnA int, ColumnB int)

GO
CREATE NONCLUSTERED INDEX [ncx_Test_ColumnA]
    ON [dbo].[Test]([ColumnA] ASC);


GO
PRINT N'Creating [ncx_Test_ColumnA]...';


GO
CREATE NONCLUSTERED INDEX [ncx_Test_ColumnB]
    ON [dbo].[Test]([ColumnB] ASC);


GO
PRINT N'Creating [ncx_Test_ColumnB]...';


GO
create procedure dbo.TestSelect1
as select 1

在上面的脚本中,我要删除“创建非聚集索引行,(并且不需要增加额外的好处)将删除相应的Print语句,保留所有其他内容,表和存储过程。

仅删除这些行,并保留其他所有内容:

CREATE NONCLUSTERED INDEX [ncx_Test_ColumnA]
    ON [dbo].[Test]([ColumnA] ASC);


PRINT N'Creating [ncx_Test_ColumnA]...';


CREATE NONCLUSTERED INDEX [ncx_Test_ColumnB]
    ON [dbo].[Test]([ColumnB] ASC);


PRINT N'Creating [ncx_Test_ColumnB]...';

PowerShell的良好资源:试图弄清楚

Automatically Create Indexes in Different Filegroup, edit Publish Profile Script

1 个答案:

答案 0 :(得分:0)

有人可以对此进行审查吗?似乎正在工作,

$sql = Get-Content C:\Users\TestUser\Desktop\indextext\original.txt -Raw
$sql = $sql -replace '(?smi)(CREATE NONCLUSTERED INDEX (.*?))\);',''
$sql | Set-Content -Path C:\Users\TestUser\Desktop\indextext\new.txt