異なる形式の T-SQL テキストを含む数千の *.sql ファイルがあり、それらのファイルのすべてのスキーマ名とオブジェクト名を一致させたいと考えています。
スキーマ名 + オブジェクト名の次の可能な形式を分離しました
- dbo.[メインパーツ.サブパーツA.サブパーツB.サブパーツC]
- [dbo].[MainPart.SubPartA.SubPartB.SubPartC]
- specialschema.[メインパート.サブパートA.サブパートB.サブパートC]
- specialschema.MainPart
- [メインパーツ.サブパーツA.サブパーツB.サブパーツC]
最初の 4 つのケースに一致する正規表現を既に作成しました
(\[{0,1}(?<schema>\b\w*?\b){0,1}\]{0,1}\.){0,1}\[{0,1}(?<object>(\w|\.)+)\]{0,1}
一致ごとに「スキーマ」と「オブジェクト」の 2 つのグループが作成されます。
問題は、最後のケースで schema=" MainPart " および object=" SubPartA.SubPartB.SubPartC "と記載されていることです。
現時点では、正規表現をいくつかの部分に分割して、より単純にする (そしてより読みやすくする) ことを検討しています。これは、既に一致があり、グループだけが正しくないためです。
または、5 つのケースすべてで正しいグループを取得するための別の正規表現手法はありますか (それでも、読みやすさを維持または改善します)?
SQL ファイルの例:
/******************************************************************
Comment block
******************************************************************/
CREATE PROCEDURE [MainPart.SubPartA.SubPartB.SubPartC]
@Param INT = NULL
AS
BEGIN
SET NOCOUNT ON
SELECT * FROM dbo.[Table] WHERE fldParam = @Param
SET NOCOUNT OFF
END
GO