コード例 #1
0
        private void AnalyzeInsertStatement(InsertStatement insertStatement, ParserResults results)
        {
            insertStatement.PrintTSqlStatementBlockToDebugConsole();
            List <TableParsingResult> temp = new List <TableParsingResult>();

            Dictionary <string, List <TableParsingResult> > cteModel = new Dictionary <string, List <TableParsingResult> >();

            if (insertStatement.WithCtesAndXmlNamespaces?.CommonTableExpressions.Count > 0)
            {
                foreach (CommonTableExpression cte in insertStatement.WithCtesAndXmlNamespaces.CommonTableExpressions)
                {
                    AnalyzeCommonTableExpression(cteModel, cte);
                }
            }
            if (insertStatement.InsertSpecification.Target is NamedTableReference insertNamedTableReference)
            {
                string tableName = ExtraceTableNameFromNamedTableRefernce(insertNamedTableReference, out string alias);
                temp.AddIfNotExists(tableName, SqlOperationType.INSERT, alias);
                var items = ExtractTablesFromInsertStatement(insertStatement, cteModel);
                temp.AddIfNotExists(items);
            }
            else if (insertStatement.InsertSpecification.Target is VariableTableReference variableTableReference)
            {
                temp.AddIfNotExists(variableTableReference.Variable.Name, SqlOperationType.INSERT, null);
                var items = ExtractTablesFromInsertStatement(insertStatement, cteModel);
                temp.AddIfNotExists(items);
            }

            insertStatement.PrintTablesToDebugConsole(temp);
            results.AddIfNotExists(temp);
        }