Eu tenho um arquivo com mil linhas de códigos com detalhes do índice como abaixo:
IF NOT EXISTS (SELECT 1 FROM SYS.INDEXES WITH (NOLOCK) WHERE name = 'IX_Test1' AND [object_id] = OBJECT_ID(N'Test1', N'U'))
BEGIN
CREATE UNIQUE INDEX [IX_Test1] ON [Test1]
(
[cd] ASC
)
WITH (FILLFACTOR = 90, IGNORE_DUP_KEY = OFF, PAD_INDEX = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, STATISTICS_NORECOMPUTE = OFF, DROP_EXISTING = OFF ) ON [PRIMARY]
END
IF NOT EXISTS (SELECT 1 FROM SYS.INDEXES WITH (NOLOCK) WHERE name = 'IX_Test2' AND [object_id] = OBJECT_ID(N'Test2', N'U'))
BEGIN
CREATE INDEX [IX_Test2] ON [Test2]
(
[AdID] ASC , [Date] ASC
) INCLUDE ( [AID], [LM] )
WITH (FILLFACTOR = 90, IGNORE_DUP_KEY = OFF, PAD_INDEX = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, STATISTICS_NORECOMPUTE = OFF, DROP_EXISTING = OFF ) ON [PRIMARY]
END
Eu quero formatar esses dados como abaixo para fins de comparação:
IF NOT EXISTS (SELECT 1 FROM SYS.INDEXES WITH (NOLOCK) WHERE name = 'IX_Test1' AND [object_id] = OBJECT_ID(N'Test1', N'U')) BEGIN CREATE UNIQUE INDEX [IX_Test1] ON [Test1] ( [cd] ASC ) WITH (FILLFACTOR = 90, IGNORE_DUP_KEY = OFF, PAD_INDEX = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, STATISTICS_NORECOMPUTE = OFF, DROP_EXISTING = OFF ) ON [PRIMARY] END
IF NOT EXISTS (SELECT 1 FROM SYS.INDEXES WITH (NOLOCK) WHERE name = 'IX_Test2' AND [object_id] = OBJECT_ID(N'Test2', N'U')) BEGIN CREATE INDEX [IX_Test2] ON [Test2] ( [AdID] ASC , [Date] ASC ) INCLUDE ( [AID], [LM] ) WITH (FILLFACTOR = 90, IGNORE_DUP_KEY = OFF, PAD_INDEX = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, STATISTICS_NORECOMPUTE = OFF, DROP_EXISTING = OFF ) ON [PRIMARY] END
Então basicamente tudo entre IF e END deve vir como uma linha. Eu tentei fazer isso usando REGEX, mas não funcionou. Se alguém puder me ajudar nesse sentido, seria de grande ajuda.
Por favor, deixe-me saber se você precisar de mais detalhes.
Se você estiver disposto a fazer isso em duas etapas, aqui está uma abordagem que funciona, usando a opção Regex na caixa de diálogo Substituir do SSMS.
Passo 1
Exclua todas as terminações de linha, comprimindo tudo em uma única linha.
Replace: \r\n
With:
Explicação: A
\r\n
procura por um final de linha, que é quase certamente um Retorno de Carro (\r) seguido por uma Nova Linha (\n). Substitua-o por nada.Passo 2
Substitua todas as ocorrências de "END" por "END" mais um novo final de linha.
Replace: END
With: END\r\n
Explicação: Substitua "END" por "END" mais um retorno de carro e uma nova linha.
Estranheza
Seu exemplo acima tem dois espaços após o primeiro "END" e nenhum espaço após o segundo. Isso fará com que os resultados após a Etapa 2 sejam parecidos com isto:
Se o seu código real também tiver essa estranheza, você pode corrigir isso garantindo que não haja espaços após "END", com um passo 0 de:
Replace: END
(dois espaços após "END")With: END
(sem espaços após "END")Testado no SSMS 17.9.1.