Я конвертирую экспортированные представления SQL в виде файлов в другой синтаксис, используя отдельный специализированный инструмент преобразования.Этот инструмент не может обрабатывать определенные команды и форматирование, поэтому я использую Notepad ++ с RegEx для заблаговременного изменения файлов.
Пока я получаю нужные результаты, но для этого требуется три отдельных Find /Заменить действия. Я бы хотел сократить эти три действия RegEx до одного, если это возможно.
Find: (.*)(CREATE VIEW.*\nGO)(.*)
Replace: \2
Find: (CREATE VIEW )(.*)(\r\nAS)
Replace: \1"\2"\3
Find: (oldschema1\.|\[oldschema1\]\.|\[|\]|TOP \(100\) PERCENT|oldschema2\.)|(^GO$)|(\A^(.*?))
Replace: (?1)(?2\;)(?3SET SCHEMA schemaname\; \n\n\1)```
Я использую 64-битную версию Notepad ++ 7.7.1, поиск / замена с поиском по регулярным выражениямmode - проверка ". соответствует символу новой строки".
В моем коде вы увидите, что я уже использую группы перехвата с чередованием.Я думал, что смогу объединить первые два шага RegEx в качестве дополнительных групп захвата для шага 3, но это не сработает, возможно, потому, что они вложенные.
Я пытался ссылаться на вложенные группы, увеличивая соответствующим образом ссылочный номер,но это не работает (исключает результат).
Вот пример файла представления SQL.Это не рабочее представление, потому что я добавил «oldschema2», чтобы у RegEx было что-то, что можно найти для одной из замен, но это типичный пример в качестве примера.
garbage
text
beforehand
CREATE VIEW [oldschema1].[viewname]
AS
SELECT DISTINCT
TOP (100) PERCENT oldschema1.TABLENAME.FIELD1, oldschema1.TABLENAME.FIELD2
FROM oldschema1.TABLENAME
WHERE (oldschema1.TABLENAME.FIELD3 = N'Z003') AND oldschema2.TABLENAME.FIELD2 = 1
ORDER BY oldschema1.TABLENAME.FIELD1
GO
garbage
text
after
Вот некоторые дополнительные детали того, что япытаюсь достичь с каждым проходом.
Блокнот ++ RegEx Шаг 1 - изолировать блок просмотра от CREATE VIEW до GO
Найти: (.*)(CREATE VIEW.*\nGO)(.*)
Заменить: \2
Шаг 2 - поставить кавычки вокруг имени вида
Найти: (CREATE VIEW )(.*)(\r\nAS)
Заменить: \1"\2"\3
Шаг 3 - удалить / заменить различные текстыи вставьте строку в начало файла
Найти: (oldschema1\.|\[oldschema1\]\.|\[|\]|TOP \(100\) PERCENT|oldschema2\.)|(^GO$)|(\A^(.*?))
Заменить: (?1)(?2\;)(?3SET SCHEMA schemaname\; \n\n\1)
Ожидаемый результат из приведенного выше примера будет:
SET SCHEMA schemaname;
CREATE VIEW "viewname"
AS
SELECT DISTINCT
TABLENAME.FIELD1, TABLENAME.FIELD2
FROM TABLENAME
WHERE (TABLENAME.FIELD3 = N'Z003') AND TABLENAME.FIELD2 = 1
ORDER BY TABLENAME.FIELD1
;
, чего я добиваюсь с помощью описанных выше трех шагов, но я бы хотел сделать это за один поиск / замену, если это возможно.
Я довольно новичок в RegEx, и StackOverflow для этогоиметь значение.Ваша помощь очень ценится.