【发布时间】:2017-12-19 23:23:06
【问题描述】:
我在从 SSIS 变量填充 XML 文件的动态文件路径时遇到以下问题。
在 Visual Studio 2017 中,我有一个执行 SQL 任务,它带有一个返回两列的 MS SQL 存储过程。第一列是日期(存储为字符串),第二列是 URL。这两列(单行)填充 SSIS 变量并映射到脚本任务的结果集选项卡上。下一步是脚本任务,它使用变量中的 URL 从 Web 服务下载 xml 文件。 xml 文件使用文件连接管理器存储。文件的连接字符串是一个表达式,应该使用执行 SQL 任务中的第一个变量 (User::rateDate)
连接字符串表达式:
@[User::xmlFileLocation] + "ExchangeRates-" + @[User::rateDate] + ".xml"
计算结果为
\server\ExchangeRates\ExchangeRates-.xml
XML 文件应保存为 ExchangeRates-2017-12-19.xml,其中 2017-12-19 是存储过程的结果,但 XML 文件保存为 ExchangeRates-.xml
如果我手动填充 User::rateDate 变量,它将在连接字符串中使用它,但我无法从存储过程结果中填充它。
生成的日期也是 URL 生成的一部分,所以我希望这两个都在同一个地方创建,即我不想通过表达式中的一些 GETDATE() 逻辑来分配文件名。
我已确认正在填充的变量是一个脚本任务 C# 弹出窗口。
我已通过将存储过程结果更改为显式字符串(如“test”)确认这不是日期/字符串问题。它仍然没有被添加到连接字符串中。
谢谢,蒂姆
【问题讨论】:
-
如果从 SQL 执行存储过程,它会返回值吗?也可以在执行 SQL 任务编辑器中添加变量映射选项卡和主窗体的屏幕截图吗?
-
确保您没有在不同的范围中意外创建两个同名变量。您可能会在一个范围内填充变量,然后从另一个范围内读取它。我以前做过,我花了很长时间才完成。
-
谢谢,我已经添加了这些屏幕截图并检查了变量范围,这将是一个棘手的问题。是的,如果在 SSMS 中执行存储过程会返回值并正确填充 User::serverURL 并下载 xml。
-
@TimPeters 是存储过程返回值作为选择语句结果(表)还是输出参数?你能显示包含结果生成的存储过程部分吗?
标签: sql-server ssis etl sql-server-data-tools ssis-2017