【问题标题】:SSIS : Unwanted line return on a dynamic connection stringSSIS:动态连接字符串上不需要的行返回
【发布时间】:2018-01-11 10:02:40
【问题描述】:

在 SSIS 包中,我想将数据从多个实例发送到平面文件。为此,我创建了一个由 3 个变量组成的动态连接字符串:

  • “.txt”
  • 网络路径
  • 文件名(这是我在包中其他地方使用的实例名称变量(字符串))

当我此时评估我的表达式时,我收到:

对于

TRIM(@[User::FileName]+REPLACE(@[User::ServerName],"\\","")+@[User::ExtensionFile])

我收到

\\test-01\TEMP\SQL01MyInstance.txt

但是,当我运行作业时,它无法创建 SQL01MyInstance.txt,并且我收到错误消息:

[平面文件目标 [11]] 错误:无法打开数据文件“\\test-01\TEMP\SQL01MyInstance
.txt”。

[SSIS.Pipeline] 错误:平面文件目标未通过预执行阶段并返回错误代码 0xC020200E。

文件名末尾有一个不需要的空格,当我将错误消息复制粘贴到其他地方时,它似乎是一个换行符(在 .txt 之前)

有谁知道我怎样才能摆脱它那行返回(我假设这会使工作失败)?

编辑 1:

目标文件夹的权限没问题,因为我创建了另一个平面文件以防出现错误,并且在失败后正常创建;但不是动态名称(正常行为)

【问题讨论】:

  • 您是从 sql server 代理作业运行这个包吗?
  • 不,我直接从我的视觉工作室运行它

标签: sql-server ssis expression connection-string etl


【解决方案1】:

要删除行返回,您可以使用 REPLACE() 函数和 \r\n

REPLACE(REPLACE(TRIM(@[User::FileName]+REPLACE(@[User::ServerName],"\\","")+@[User::ExtensionFile]),"\r",""),"\n","")

在哪里

 \r  : carriadge return
 \n  : line feed

【讨论】:

  • 完美运行!谢谢!
【解决方案2】:

TRIM 函数只修剪空格字符(与修剪所有空白的其他函数相比):

TRIM 不会删除空格字符,例如制表符或换行符。 Unicode 为许多不同类型的空格提供代码点,但此函数仅识别 Unicode 代码点 0x0020。当双字节字符集 (DBCS) 字符串转换为 Unicode 时,它​​们可能包含 0x0020 以外的空格字符,并且该函数无法删除此类空格。要删除各种空格,您可以在从 Script 组件运行的脚本中使用 Microsoft Visual Basic .NET Trim 方法。

https://docs.microsoft.com/en-us/sql/integration-services/expressions/trim-ssis-expression

你可以先试试看是否有效(先修剪再连接):

TRIM(@[User::FileName]) + TRIM(REPLACE(@[User::ServerName],"\","")) + TRIM(@[User::ExtensionFile]))

如果不是,那么您将不得不使用 MSDN 文章推荐的脚本任务/组件执行推荐的 String.Trim() 函数(同样,先修剪每个变量,然后连接)

【讨论】:

  • 这也不起作用,我会尝试脚本/任务组件选项并让您保持更新。注意:但即使没有 TRIM 函数,当我“评估”表达式时,我仍然有相同的结果。真正的区别在于输出
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
相关资源
最近更新 更多