4

ScriptDom を使用して T-SQL ステートメントを解析し、少なくとも 2 つの列が指定されていることを確認したいと考えています。列名を抽出する方法を見つけ、それから適切に検証を行うことができました。ただし、列がエイリアス化されているかどうかも検証したいのですが、それを確認する方法がわかりません。

select ステートメントが MCA 列と MOC 列の両方を指定していることを確認したいと考えています。

// this should pass
var sql = "SELECT MCA, MOC
FROM myTable";

// this should also pass
var sql = "SELECT some_col as MCA, some_other_col as MOC
FROM myTable";

_parser = new TSql120Parser(false);
var reader = new StringReader(sql);
var statements = parser.ParseStatementList(reader, out _errors);
var firstStatement = statements[0];
var select = firstStatement as SelectStatement;

var querySpec = statement.QueryExpression as QuerySpecification;
var columns = querySpec.SelectElements;
foreach(var column in columns) {
  if (column is SelectScalarExpression) {
    var expression = (column as SelectScalarExpression).Expression;
    if (expression is ColumnReferenceExpression) {
      var columnExpression = expression as ColumnReferenceExpression;
      if (identifier.Identifiers.Count == 1)
      {
        var columnName = identifier.Identifiers.First().Value;
        // I can validate from this extracted column name
      }
    }
  }
}
4

1 に答える 1