#sql #regex
#sql #регулярное выражение
Вопрос:
У меня есть много SQL-скриптов с инструкциями DDL и DML.
Я хочу разделить и извлечь измененные / созданные / удаленные объекты SQL. Т. е. у меня есть скрипт:
create proc [dbo].test
as
print 1
go
drop table test_table
go
alter procedure dbo.test
as
print 2
Мне нужно создать / изменить / удалить объекты SQL, например, следующим образом:
-
proc dbo.test — создать
-
таблица test_table — удаление
-
proc dbo.test — изменить
Ответ №1:
Я не уверен в вопросе, где вы будете использовать регулярное выражение, но попробуйте это:
/(create)(.*)|(drop)(.*)|(alter)(.*)/
Ответ №2:
Для анализа произвольных хранимых процедур sql Server вам гораздо лучше использовать анализатор SQL. Попытка проанализировать произвольный SQL с помощью регулярных выражений будет равносильна написанию собственного синтаксического анализатора.
С помощью полного анализатора SQL demo с этой страницы генерирует результат, подобный этому, который является именно тем, что вам нужно:
sstMssqlCreateProcedure(proc: [dbo].test - create)
sstMssqlPrint
sstMssqlGo
sstMssqlDropTabletable: test_table - drop
sstMssqlGo
sstMssqlAlterProcedure(proc: dbo.test - alter)
sstMssqlPrint