微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SSIS 2016如何将UNC路径和GETDATE传递给平面文件连接管理器的ConnectionString属性?

如何解决SSIS 2016如何将UNC路径和GETDATE传递给平面文件连接管理器的ConnectionString属性?

我正在使用SSIS 2016从sql Server 2016运行查询,并将带有查询结果的文本文件创建到网络共享上。我无法在路径中使用驱动器号,因此改用UNC路径。我最初的方法是将表达式传递到Flat File Connection Manager的ConnectionString属性中,但是在部署到Integration Services目录之后,该程序包会失败并出现错误

因此,我创建了一个参数,用于将连接字符串存储为以下格式的字符串:

\\UNCPath\dir1\dir2\dir3(has spaces)\dir4\dir5\dir6\dir7\dir8\Filename_+ RIGHT("0" + (DT_STR,4,1252)DATEPART("yyyy",getdate() ),4)  +  RIGHT("0" + (DT_STR,1252)DATEPART("mm",2) 
+ RIGHT("0" +(DT_STR,1252)DATEPART("dd",2) + .txt

请注意,我需要在文件名末尾添加yyyymmdd格式的GETDATE()。

当我尝试运行该软件包时收到错误消息:

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

需要进行哪些更改以确保我的参数传递有效的路径和文件名?

解决方法

我对SSIS表达语言的永远建议是使自己更轻松。

切勿直接修改对象上的表达式。无法调试表达式的内容,您只能猜测出了什么问题。

相反,请在程序包中创建许多SSIS变量。它们是“免费”的使用,并且是您识别任务黑匣子中唯一的希望。

就您而言,我设想至少有5个变量。

  • FileBase-字符串-Filename _
  • FileExtension-字符串-.txt
  • FolderBase-字符串-\ Server \ Share ... \ dir8 \
  • CurrentDate-字符串-评估为exprexsion = True-RIGHT("0" + (DT_STR,4,1252)DATEPART("yyyy",getdate() ),4) + RIGHT("0" + (DT_STR,1252)DATEPART("mm",2) + RIGHT("0" +(DT_STR,1252)DATEPART("dd",2)

FileBase只是单词“ Filename _”

FileExtension为“ .txt”

FolderBase的外观应与我们定义的完全一样,不需要反斜杠转义,但必须带有尾部斜杠

CurrentDate的外观应为YYYYMMDD,在发布时为20200925

将所有内容放在一起将产生我们想要的内容,但回到规则1,不要在属性的ConnectionString中全部完成操作。而是添加您的最终SSIS变量

  • CurrentFileName-字符串-计算为表达式= True-@[User::FolderBase] + @[User::FileBase] + @[User::CurrentDate] + @[User::FileExtension]

现在我们在做饭!打开包装时,您可以查看该路径是否正确。您可以将脚本任务添加到force the variable values to show up in the SSISDB log包的开头(尽管非动态部分已经存在)。

在注释中,您表示您正在使用参数。它们有些不同,因为它们是只读的,并且据我所知,不支持表达式,因此上面的公式在稍作调整后仍然有效。

创建一个与要动态化的每个变量相对应的参数。也就是说,UNC路径会随着程序包从本地环境迁移到开发人员,从uat迁移到生产服务器而发生变化。

确保参数与变量匹配-在UNC路径上具有-aka斜杠。

修改变量,使其现在具有EvaluateAsExpression = True,然后将表达式与参数对齐

  • FolderBase-字符串-以expression = true表示-@[$PackageName::FolderBase]

仅有的两个变量

现在一切都很好,并且可以按预期运行,然后使用@ [User :: CurrentFileName]驱动平面文件连接管理器。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。