請觀察以下簡單的查詢:
SELECT ShortName FROM Groups (nolock)
我這樣決議:
var parseResult = Parser.Parsse("SELECT ShortName FROM Groups (nolock)" )。
Dump(parseResult.Script);
...
private static void Dump(string indent, SqlCodeObject sqlCodeObject)
{
Console.WriteLine(indent sqlCodeObject.GetType().Name) 。
indent = " ";
foreach (var child in sqlCodeObject.Children)
{
Dump(indent, child);
}
}
這將輸出以下AST:
這將輸出以下AST:
SqlScript
SqlBatch
SqlSelectStatement
SqlSelectSpecification
SqlQuerySpecification
SqlSelectClause
SqlSelectScalarExpression
SqlColumnRefExpression
串列
符號
術語
SqlTableValuedFunctionRefExpression
一部分物件識別符號
符號
串列
一部分物件識別符號
符號
我的問題是--為什么SqlFromClause是SqlTableValuedFunctionRefExpression的父級?我在查詢中沒有任何函式呼叫。
uj5u.com熱心網友回復:
這是我使用SMO 150.18208.0唯一能得到理想結果的設定組合:
var opts = new ParseOptions("GO", true, DatabaseCompatibilityLevel.Version80);
opts.TransactSqlVersion = TransactSqlVersion.Version105;
var parseResult = Parser.Parsse("SELECT ShortName FROM Groups (nolock)", opts) 。
Dump(" ",parseResult.Script)。
輸出
SqlScript
SqlBatch
SqlSelectStatement
SqlSelectSpecification
SqlQuerySpecification
SqlSelectClause
SqlSelectScalarExpression
SqlColumnRefExpression
串列
符號
術語
串列中的 "SqlTableRefExpression"。
一部分物件
符號
編碼:SqlTableHint
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/307252.html
標籤:
