J'essaye d'analyser SQL en utilisant le TSql100Parser fourni par microsoft. En ce moment, j'ai un peu de mal à l'utiliser de la façon dont il semble être destiné à être utilisé. En outre, le manque de documentation n'aide pas. (exemple: http://msdn.microsoft.com/en-us/library/microsoft.data.schema.scriptdom.sql.tsql100parser.aspx)en utilisant le TSqlParser
Lorsque j'exécute une instruction SELECT simple via l'analyseur, elle renvoie une collection de TSqlStatements qui contient une instruction SELECT. Le problème est que l'instruction TSqlSelect ne contient pas d'attributs tels qu'une clause WHERE, même si la clause est implémentée en tant que classe. http://msdn.microsoft.com/en-us/library/microsoft.data.schema.scriptdom.sql.whereclause.aspx L'analyseur reconnaît la clause WHERE en tant que telle, en examinant le flux de jetons. Donc, ma question est, est-ce que j'utilise correctement l'analyseur? En ce moment, le flux symbolique semble être la caractéristique la plus utile de l'analyseur ...
Mon projet d'essai:
public static void Main(string[] args)
{
var parser = new TSql100Parser(false);
IList<ParseError> Errors;
IScriptFragment result = parser.Parse(
new StringReader("Select col from T1 where 1 = 1 group by 1;" +
"select col2 from T2;" +
"select col1 from tbl1 where id in (select id from tbl);"),
out Errors);
var Script = result as TSqlScript;
foreach (var ts in Script.Batches)
{
Console.WriteLine("new batch");
foreach (var st in ts.Statements)
{
IterateStatement(st);
}
}
}
static void IterateStatement(TSqlStatement statement)
{
Console.WriteLine("New Statement");
if (statement is SelectStatement)
{
PrintStatement(sstmnt);
}
}
Pouvez-vous poster le fragment de code que vous utilisez pour créer le lecteur/liste que vous .Parse inG avec la façon dont vous itérez la déclarations analysées? Plus vous pouvez poster, mieux c'est ... – chadhoc
Vous pouvez utiliser les dernières [TSql110Parser] (http://technet.microsoft.com/fr-fr/library/microsoft.sqlserver.transactsql.scriptdom.aspx) –