从SSIS/DTSX包中提取SQL语句

Lov*_*pta 8 sql-server ssis visual-studio

我正在寻找一些东西来提取我的SSIS/DTSX包中的所有SQL查询.但到目前为止没有什么能帮到我.

我已经看过Microsoft的Microsoft.SqlServer.DTS API了.但他们正在直接提取一些问题.但是DTS中存在的查询:变量 TAG,它们不被提取.

我想要.Net框架中的东西.因为我需要使用输出来执行其他任务.我正在使用C#.

示例代码如下.不解决所有情况

// this function takes the list of task hosts as input
// and gives all the queries present in taskhosts.

public static string ExtractQueriesFromTasks(List<TaskHost> Tasks)
{
    string src_query = "";
    foreach (TaskHost executable in Tasks)
    {
        DtsContainer Seq_container = (DtsContainer)executable;
        if (executable.InnerObject.GetType().Name == "ExecuteSQLTask")
        {
            ExecuteSQLTask sqlTask = (ExecuteSQLTask)executable.InnerObject;
            string src_query2 = sqlTask.SqlStatementSource;

            src_query = src_query + "\n" + src_query2.ToUpper();
        }
        if (executable.InnerObject.GetType().Name == "__ComObject")
        {
            IDTSPipeline100 sqlTask = (IDTSPipeline100)executable.InnerObject;
            Console.WriteLine(Microsoft.VisualBasic.Information.TypeName(executable.InnerObject));
            //ExecuteSQLTask sqlTask = (ExecuteSQLTask)executable.InnerObject;
            //string src_query2 = sqlTask.SqlStatementSource;

            //src_query = src_query + "\n" + src_query2.ToUpper();
        }


        if (executable.InnerObject.GetType().Name == "ScriptTask")
        {
            ExecuteSQLTask sqlTask = (ExecuteSQLTask)executable.InnerObject;
            string src_query2 = sqlTask.SqlStatementSource;

            src_query = src_query + "\n" + src_query2.ToUpper();
        }
    }
    return src_query;
}
Run Code Online (Sandbox Code Playgroud)

小智 0

还有另一种方法。

您可以创建自定义日志事件。这里写的是:

为 ssis 任务启用自定义日志记录

然后您只需要运行该包并解析创建的日志文件。

虽然我不确定 DTS,但这应该从 SSIS 包中的表达式等获取所有 SQL。