Требуется регулярное выражение для имен объектов SQL

#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