何百ものストアド プロシージャを解析して、出力変数「@FirstName」、使用するテーブル、および「MyTbl.FirstName」から取得するフィールドを具体的に取得しようとしています。変数はかなり簡単に収集できますが、テーブル名の収集に問題があります。誰でも助けてもらえますか?
これまでのところ、StreamReader を使用して SQL ファイルを解析し、行ごとに情報を収集することで、これらのフィールドのほとんどを引き出すことができました。たとえば、行に出力が含まれている場合、行の最初のテキストがおそらく@変数。
@Address1 varchar(45) output,
@Address2 varchar(45) output,
@City varchar(35) output,
@State varchar(2) output,
@Zip varchar(10) output
そこから @Variable をディクショナリに保存できます。行に @Variable が含まれていて、「=」も含まれている場合は、対応するフィールドが一致していることがわかります。
@Address1 = c.Address,
@Address2 = c.AddressSecondLine,
@City = c.City,
@State = c.State,
@Zip = c.ZipOrPostalCode
今、テーブル名の収集に問題があります。フィールド名からテーブル エイリアスを簡単に解析できますが、エイリアスとテーブル名の一致に問題があります。これを行う良い方法を知っている人はいますか?これが私がこれまで試してきたことです:
FROM Table.dbo.SalesStuff ss
LEFT OUTER JOIN Table.dbo.Customer c ON ss.CustNo = c.CustNo
Left JOIN Table.dbo.Vending v on @tmpVin = v.vin
コード:
keyColl = tables.Keys;
foreach (string var in keyColl)
{
if (line.Contains(" " + var + '\r') || line.Contains(" " + var + " ") || line.Contains(" " + var + ((char)13)) || line.Contains(" " + var + Environment.NewLine))
{
tables[var] = line.ToString();
break;
}
}
ほとんどのエイリアスは文字の後に改行が続くため、これはテーブルのエイリアスと一致すると思いましたが、これまでのところ、テーブル名を取得できませんでした...誰かアイデアがありますか?