我试图解析数百个存储过程,以专门获取它们的输出变量“@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;
}
}
我认为这将与表别名匹配,因为大多数别名都是一个字母,后跟一个换行符,但到目前为止我还没有得到任何表名......有人知道吗?