将文件名传递给SSIS中的执行SQL任务

时间:2012-07-26 09:50:56

标签: sql-server ssis

我正在忙于设置一个SSIS包,它接受一个平面文件并将其内容加载到一个临时表中。从那里它需要获取该文件的文件名并将其保存到另一个表的字段中,以及其中一行数据。通过使用执行存储过程的执行SQL任务来加载数据。此过程将文件名作为输入参数(只是这样我可以将其写入该表)...我在执行以下操作的执行SQL任务之前添加了一个脚本任务:

public void Main()
        {
            string inputFolder;
            string fileName;

            inputFolder = Dts.Variables["SourceFolder"].Value.ToString();
           // MessageBox.Show(inputFolder);

            string[] foundFiles = null;
            foundFiles = System.IO.Directory.GetFiles(inputFolder);

            if (foundFiles.Length > 0)
            {
                fileName = foundFiles[0];

                Dts.Variables["ProcessedFileName"].Value = System.IO.Path.GetFileName(fileName);
//                MessageBox.Show(fileName);

               // MessageBox.Show(System.IO.Path.GetFileName(fileName));

            }

            Dts.TaskResult = (int)ScriptResults.Success;
        }

“ProcessedFileName”变量是SSIS包中的全局变量,以及“SourceFolder”变量。

我使用直接输入执行设置的执行SQL任务:

DECLARE @StoredProcedure varchar(100) = ?;
DECLARE @ProcessedFileName varchar(100) = ?;

EXEC ? ?;

参数映射是变量StoredProcedure和ProcessedFileName。

问题是,当我运行它时,它告诉我“没有给出一个或多个必需参数的值。”为什么会这样?

1 个答案:

答案 0 :(得分:1)

您无法使用参数在“执行SQL任务”中动态更改存储过程名称。这就是EXEC ? ?;正在做的事情。

如果您需要在运行时更改过程名称,则需要通过表达式使用字符串连接来构建我们的查询。

更大的图片,似乎您正在使用一个For Each (file) Enumerator任务就足够的脚本任务。有理由使用脚本任务而不是foreach(比如你需要按顺序处理等),但它不像你那样读。

可能对如何完成表达式和foreach枚举器有帮助的各种答案