更新:この質問を簡単にするため。文字列を変更したので、BEGINENDについてまったく心配する必要はありません。代わりに、ターミネータとしてGOステートメントしかありません。私は今、他の人からいくつかの答えを得ることを願っています
DDLスクリプト(CREATE、ALTER、DROP)でINSERT、UPDATE、DELETEなどの非表示のDMLステートメントを検出できる正規表現を作成する必要があります。
例。以下のスクリプトでは、2つのdeletetable5ステートメントと最後のinsertintotable3ステートメントをキャッチする必要があります。ただし、実際にはストアドプロシージャ自体の本体にある挿入ステートメントは無視する必要があります。
ここでこの正規表現を実行すると:http://regexr.com?33rf3、90 %を達成したことがわかります。動作していない唯一の部分は、最後のGOまで貪欲な試合を行っていることです。最初のGOで停止する必要があります。+を使ってみましたか?欲張りでないようにするための演算子ですが、動作したくありません。
delete table5 /*Regex should find this*/
GO
create proc abc
begin
insert into table1 /*Regex should IGNORE this*/
begin
fake nesting here
insert into table2 /*Regex should IGNORE this*/
end
end
GO
delete table5 /*Regex should find this*/
GO
alter proc abc2
begin
--no statements in this proc
end
GO
insert into table3 /*Regex should find this*/