ScriptDom парсинг SELECT с псевдонимом
Я хочу использовать ScriptDom для анализа оператора T-SQL и убедиться, что указано не менее двух столбцов. Я нашел способ извлечь имена столбцов и могу правильно сделать мою проверку из этого. Однако я также хочу проверить, был ли столбец псевдоним и не уверен, как это проверить.
Я хочу убедиться, что в операторе 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
}
}
}
}
0 ответов
SelectScalarExpression
имеет ColumnName
собственность, которая находится на том же уровне, что и ColumnReferenceExpression
. Если для столбца нет псевдонима, он будет пустым.
Ваш цикл может содержать что-то вроде этого:
if (column is SelectScalarExpression)
{
var columnAlias = (column as SelectScalarExpression).ColumnName?.Value;
if (columnAlias == null)
{
// evaluate the ColumnReferenceExpression here
}
}