これはhereからのフォローアップの質問です。T4 テンプレートを使用して SSDT プロジェクトからラッパー関数を生成できるように、 DACExtensionsSelectStatement
を使用してからオブジェクトを取得しようとしています。Procedure
問題は、Visitor オブジェクトの Nodes プロパティにノードが含まれていないことです。私は何が欠けていますか?
これが私の訪問者です:
public class SelectVisitor : TSqlFragmentVisitor
{
public SelectVisitor() { this.Nodes = new List<SelectStatement>(); }
public List<SelectStatement> Nodes { get; private set; }
public override void Visit(SelectStatement node)
{
base.Visit(node);
this.Nodes.Add(node);
}
}
そして、これが私がそれを使用しようとしている方法です:
// Create the model
var procFiles = Directory.GetFiles(sqlPath, "*.sql", SearchOption.AllDirectories);
var model = new TSqlTypedModel(SqlServerVersion.Sql100, new TSqlModelOptions());
foreach(var procFile in procFiles)
{
model.AddObjects(File.ReadAllText(procFile));
}
// Loop through the procs
var procs = model.GetObjects<TSqlProcedure>(DacQueryScopes.UserDefined);
foreach(var proc in procs){
var selectVisitor = new SelectVisitor();
var ast = proc.GetAst();
ast.Accept(selectVisitor);
foreach(var node in selectVisitor.Nodes){
// Nodes has Count=0 :(
}
}