1

所以我更新了 SSIS 包中的数据库源查询。但是现在包裹在目的地失败了。在调试中,我得到这个输出:

The file name property is not valid. The file name is a device or contains invalid characters.

No destination flat file name was provided. Make sure the flat file connection manager is configured with a connection string. If the flat file connection manager is used by multiple components, ensure that the connection string contains enough file names.

根据我的研究,我认为日期变量没有正确转换。这很令人困惑,因为我没有触及表达式(FileLocation 变量除外)并且它的计算正确。

这是表达式:

@[User::FileLocation]  + "\\GRADE_" + Right((DT_STR,4,1252) DatePart("yyyy",getdate()),2) +
Right("0" + (DT_STR,4,1252) DatePart("m",getdate()),2) +
Right("0" + (DT_STR,4,1252) DatePart("d",getdate()),2) + "_" + 
Right("0" + (DT_STR,4,1252) DatePart("Hh",getdate()),2) + 
Right("0" + (DT_STR,4,1252) DatePart("Mi",getdate()),2) + 
Right("0" + (DT_STR,4,1252) DatePart("Ss",getdate()),2) + 
Right("0" + (DT_STR,4,1252) DatePart("Ms",getdate()),2) + ".txt"

按照建议,我将变量设置EvaluatedAsExpressionTrue,但无济于事。

我尝试硬编码文件夹路径而不是使用变量,这似乎解决了这个问题。但我需要使用一个可配置的变量。问题是什么?

更新:

我注意到我使用的变量的范围在另一个包中。我如何才能查看范围外的变量?如果我突出显示了正确的包,并尝试创建一个包级变量,它的范围会被分配为不同的包吗?

在此处输入图像描述

4

2 回答 2

2

您面临的问题是由于通过复制现有包来创建新包。该示例说明了您的案例中发生的情况。

我创建了一个新的 SSIS 2008R2 解决方案来说明包变量范围中发生的情况。当您创建一个新的项目解决方案时,默认情况下它还会创建一个名为Package1.dtsx. 我已经在路径中创建了包解决方案C:\temp\SSIS.2008R2

一揽子解决方案

如果您导航到项目文件夹位置,您将看到包文件。右键单击 dtsx 文件并在记事本或 Notepadd++ 中打开它。我更喜欢记事本++。ObjectName在文件中搜索。您会注意到包的 ObjectName 是 Package1,与文件名相同。因此,BIDS 为包和文件提供了相同的名称。但是,两者必须具有相同的名称并不是强制性的。

对象名称 - 1

现在,尝试将包重命名为InquiryFile.dtsx. 当您重命名包时,BIDS 将抛出以下警告消息。BIDS 试图告诉您正在重命名包,因此对象名称可能与文件名不同步,您想重命名它吗?对于这个包,让我们说是。保存包。

重命名 - 1

返回项目文件夹位置并在文本编辑器中再次打开 dtsx 文件。搜索ObjectName,您会注意到对象名称已更改为,InquiryFile因为这是我们为重命名包而提供的名称。

重命名的对象名称

现在,回到项目解决方案。复制包 InquiryFile.dtsx 并将其粘贴到 SSIS 包节点以创建新包。该包将被命名为InquiryFile 1.dtsx

新包装

如果你尝试在这个新变量上创建一个包变量,你会注意到InquiryFile即使你已经打开了包文件,范围也是 to InquiryFile 1.dtsx。那可能会让你彻底失望。

新变量

为什么范围设置为InquiryFile而不是InquiryFile 1?要找到它,我们必须转到项目文件夹位置。这次在文本编辑器中打开文件 InquiryFile 1.dtsx。您会注意到 ObjectName 仍然设置为 InquiryFile,因为我们通过复制现有文件 InquiryFile.dtsx 创建了这个包。BIDS 只会重命名文件而不是其中的对象名称。

您在“变量”窗格中看到的范围实际上是对象名而不是文件名。

重命名

现在回到 BIDS 项目解决方案,让我们将文件重命名InquiryFile 1.dtsxGradeFile.dtsx. 当出现以下警告提示时,请确保单击Yes

重命名警告

保存包并关闭它。现在,重新打开包,您会注意到 Variables 窗格上的 Scope 显示GradeFile

新范围

这是因为当我们重命名文件时,我们也单击“是”来重命名对象。您可以转到项目解决方案文件夹并GradeFile.dtsx在文本编辑器中打开文件,以发现对象名称已正确重命名。这是您在变量范围部分看到的对象名称。

希望您能让您了解示波器的工作原理。

要解决您的问题,只需尝试重命名包,当提示重命名对象名称时,请确保单击Yes

重命名

于 2012-10-31T15:42:30.510 回答
1

虽然我没有找到问题的根本问题(我认为这与我的变量有关),但我的同事找到了解决方法:

按照 Siva 在她的回答中给出的说明(更正了我的变量范围,但没有解决问题):

我的同事创建了几个额外的字符串变量,一个包含文件夹路径,另一个用于评估文件名。他还在包的开头创建了一个脚本任务,然后将这两个变量组合成第三个变量。

然后在目标连接处,连接字符串表达式包含最终的串联变量。瞧,目标文件名被接受,打包成功!

于 2012-11-02T19:31:38.290 回答