【问题标题】:Pass file name into execute SQL task in SSIS将文件名传递给 SSIS 中的执行 SQL 任务
【发布时间】:2012-07-26 22:23:38
【问题描述】:

我正忙于设置一个 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。

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

【问题讨论】:

    标签: sql-server ssis


    【解决方案1】:

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

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

    更大的图景,您似乎正在使用 For Each (file) Enumerator 任务就足够了的脚本任务。有理由在 foreach 上使用脚本任务(例如,如果您需要按顺序处理等),但它不像您正在这样做。

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

    【讨论】:

      猜你喜欢
      • 2015-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多