我想使用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
答案 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