SSIS

时间:2017-12-19 23:23:07

标签: sql-server ssis etl sql-server-data-tools ssis-2017

从SSIS变量填充XML文件的动态文件路径时遇到以下问题。

在Visual Studio 2017中,我有一个执行SQL任务,其中包含一个返回两列的MS SQL存储过程。第一列是日期(存储为字符串),第二列是URL。这两列(单行)填充SSIS变量,并映射到“脚本任务”的“结果集”选项卡上。下一步是脚本任务,它使用变量中的URL从Web服务下载xml文件。使用文件Connection Manager存储xml文件。该文件的连接字符串是一个表达式,应该使用执行SQL任务中的第一个变量(User::rateDate

连接字符串表达式:

@[User::xmlFileLocation] + "ExchangeRates-" +  @[User::rateDate]  + ".xml"

评估为

  

\服务器\ ExchangeRates \ ExchangeRates-的.xml

XML文件应保存为ExchangeRates-2017-12-19.xml2017-12-19是存储过程的结果,而XML文件保存为ExchangeRates-.xml

如果我手动填充User::rateDate变量,它将在连接字符串中使用它,但我无法从存储过程结果中填充它。

生成的日期也是URL生成的一部分,所以我希望这两者都在同一个地方创建,即我不想通过表达式中的某些GETDATE()逻辑分配文件名。

我已经确认正在填充的变量是一个脚本任务C#弹出。

我已经通过将存储过程结果更改为显式字符串(例如“test”)来确认它不是日期/字符串问题。它仍然没有被添加到连接字符串。

谢谢,蒂姆

Main tab Results tab Variables 2017

2 个答案:

答案 0 :(得分:1)

我将根据存储过程类型提供2个解决方案:

带有Select语句的存储过程

我假设您正在使用包含SELECT语句的存储过程,该语句返回2列表:ServerURLrateDate

在这种情况下,您必须将此select语句的结果插入临时表,然后从这些临时表中读取,例如:

CREATE TABLE #TBL(ServerURL varchar(4000), rateDate varchar(50))

INSERT INTO #TBL EXEC pr_rateDate

SELECT TOP 1 * FROM #TBL

通过这种方式,您的变量映射应该可以正常工作

带输出参数的存储过程

我将假设您正在使用需要传递2个输出参数的存储过程,例如:

EXEC sp_rateDate @ServerURL OUTPUT, @rateDate OUTPUT

所以你必须使用以下SQL语句:

EXEC sp_rateDate ? OUTPUT, ? OUTPUT

,您必须在参数映射标签

中添加2个输出参数

有用的链接

答案 1 :(得分:0)

将变量User::rateDate的数据类型更改为datetime。然后,将连接字符串表达式更改为以下内容:

@[User::xmlFileLocation] + 
"ExchangeRates-" + 
(DT_WSTR,4)DATEPART("yyyy",@[User::rateDate]) +
RIGHT("0" + (DT_WSTR,2)DATEPART("mm",@[User::rateDate]) ,2) +
RIGHT("0" + (DT_WSTR,2)DATEPART("dd",@[User::rateDate]),2) +
".xml"
相关问题