gpt4 book ai didi

c# - 带有别名的 SELECT 的 ScriptDom 解析

转载 作者:行者123 更新时间:2023-12-04 13:02:18 29 4
gpt4 key购买 nike

我希望使用 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
}
}
}
}

最佳答案

SelectScalarExpression有一个 ColumnName属性,与 ColumnReferenceExpression 处于同一级别.如果列上没有别名,则为空。

您的循环可能包含以下内容:

if (column is SelectScalarExpression)
{
var columnAlias = (column as SelectScalarExpression).ColumnName?.Value;

if (columnAlias == null)
{
// evaluate the ColumnReferenceExpression here
}
}

关于c# - 带有别名的 SELECT 的 ScriptDom 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53269460/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com