Search code examples
c#t-sqlscriptdom

ScriptDom + DeleteStatement


I want to insert "DeleteStatement" after any "DeclareTableVariableStatement" but I don't know how! it's my sample code.

public override void Visit(StatementList node)
{
    foreach (DeclareTableVariableStatement declareTableVariableStatement in node.Statements.Where(a => a is DeclareTableVariableStatement).ToList())
    {
        BeginEndBlockStatement deleteBeginEndBlockStatement = new BeginEndBlockStatement()
        {
            StatementList = new StatementList()
        };

        DeleteStatement deleteStatement = new DeleteStatement()
        {
           DeleteSpecification=new DeleteSpecification()
           {
                Target= ???
           }
        };
        deleteBeginEndBlockStatement.StatementList.Statements.Add(deleteStatement);
        node.Statements.Insert(node.Statements.IndexOf(declareTableVariableStatement) + 1, deleteBeginEndBlockStatement);
    }
    base.Visit(node);
}

Solution

  • I found the solution !

    public override void Visit(StatementList node)
    {
        foreach (DeclareTableVariableStatement declareTableVariableStatement in node.Statements.Where(a => a is DeclareTableVariableStatement).ToList())
        {
            BeginEndBlockStatement deleteBeginEndBlockStatement = new BeginEndBlockStatement()
            {
                StatementList = new StatementList()
            };
    
            DeleteStatement deleteStatement = new DeleteStatement()
            {
                DeleteSpecification = new DeleteSpecification()
                {
                    Target = new VariableTableReference()
                    {
                        Variable = new VariableReference()
                        {
                            Name = declareTableVariableStatement.Body.VariableName.Value
                        }
                    }
                }
            };
    
            deleteBeginEndBlockStatement.StatementList.Statements.Add(deleteStatement);
            node.Statements.Insert(node.Statements.IndexOf(declareTableVariableStatement) + 1, deleteBeginEndBlockStatement);
        }
        base.Visit(node);
    }