正規表現を使用してストアドプロシージャを解析し、変更します。これが私のサンプルテキストです:
DECLARE @TempTable TABLE
(
TempID int IDENTITY PRIMARY KEY,
AMFID smallint,
AppModID smallint,
AppID tinyint,
ModID smallint,
FPID smallint,
URL varchar(100),
SortIndex smallint,
[AppName] varchar(100),
ModName varchar(100),
FPName varchar(100),
WUCData varchar(7000)
)
-- Fill the temp table
INSERT INTO @TempTable
(
AMFID,
AppModID,
AppID,
ModID,
FPID,
URL,
SortIndex,
[AppName],
ModName,
FPName,
WUCData
)
SELECT
siAppModFP.AMFID,
siAppModFP.AppModID,
siAppModule.AppID,
siAppModule.ModID,
siAppModFP.FPID,
siAppModFP.URL,
siAppModFP.SortIndex,
siApplication.[AppName],
siModule.ModName,
siFP.FPName,
dbo.funcGetAppModFPWUC(siAppModFP.AMFID)
FROM siApplication WITH (NOLOCK)
..。
私はこの部分を手に入れたいだけです:
DECLARE @TempTable TABLE
(
TempID int IDENTITY PRIMARY KEY,
AMFID smallint,
AppModID smallint,
AppID tinyint,
ModID smallint,
FPID smallint,
URL varchar(100),
SortIndex smallint,
[AppName] varchar(100),
ModName varchar(100),
FPName varchar(100),
WUCData varchar(7000)
)
複数回繰り返される可能性があることに注意してください。テキスト内の一時テーブルのすべての宣言が必要です。私は次の規則的なパターンを使用しました:
string re1 = "(Declare)( )(@)((?:[a-z][a-z0-9_]*))(\\s+)(Table)(\\s+)(\\(.*\\))";
Regex r = new Regex(re1, RegexOptions.Multiline | RegexOptions.IgnoreCase);
しかし、それは機能していません。何か案は?