2

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

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

连接字符串表达式:

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

这评估为

\server\ExchangeRates\ExchangeRates-.xml

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

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

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

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

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

谢谢,蒂姆

主选项卡 结果选项卡 变量 2017

4

2 回答 2

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 个输出参数

有用的链接

于 2017-12-20T19:52:23.290 回答
0

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

@[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"
于 2017-12-20T18:43:07.873 回答