使用 SSIS 包将一个字段中的值拆分为两个值,以便在 SQL Server 中的两个不同字段中使用

Posted

技术标签:

【中文标题】使用 SSIS 包将一个字段中的值拆分为两个值,以便在 SQL Server 中的两个不同字段中使用【英文标题】:Spitting Value From One Field Into Two Values to be Used in Two Different Fields in SQL Server Using SSIS Package 【发布时间】:2014-02-20 14:50:05 【问题描述】:

我的列中有如下值的字段:

ABCDEFG:1234

我有一个 SSIS 包,需要将此值拆分为两个值,如下所示:

ABCDEFG

1234

ABCDEFG 将被导入 Field1,1234 将被导入 Field2

我在 DataFlow 中的 DerivedColumn1 进程上有以下脚本:

LEFT([PN IN],FINDSTRING([PN IN],":",1))

以及DataFlow中DerivedColumn2进程中的以下脚本:

REPLACE([PN IN],":","")

这给了我以下输出:

ABCDEFG

我的问题是......因为我已经在为这个字段使用派生列,所以它不允许我在我的 DataFlow 中执行另一个 DerivedColumn 进程来提取“:”的RIGHT 给我@ 987654329@...我还要采取什么协议来获取RIGHT?我可以将它嵌套到一个脚本中吗?

【问题讨论】:

我很困惑:你不能在Data Flow TaskDerived Column 组件中添加LEFT 作为新列和RIGHT 作为另一个新列吗?它究竟是如何不让你这样做的? 我没有尝试在数据库中创建新列。我正在导入 Excel 报告,这些报告位于报告的一列中,但需要拆分,因为数据库已经具有拆分时应该包含的 2 列 【参考方案1】:

你可以这样拆分它们:

左栏:

SUBSTRING(col1,1,FINDSTRING(col1,":",1) - 1)  

右栏:

SUBSTRING(col1,FINDSTRING(col1,":",1) + 1,LEN(col1) - FINDSTRING(col1,":",1))

或者,如果你有SSIS 2012,你可以使用TOKEN函数

左栏:TOKEN(col1,":",1) 右栏:TOKEN(col1,":",2)

【讨论】:

我可以抓住左边和右边。也许我应该问一个更好的问题。我目前有一个指向“派生列”的“ExcelSource”指向一个“OLE DB 命令”。我的所有变量都映射到我的 ExcelSource 中的列。我的问题出在我的 DataFlow 过程中。 Im 拆分的列需要映射到数据库中的 2 个不同的列。当我的 ExcelSource 中的字段只能映射到我的 OLE DB 命令中的一个变量时,我需要在 DataFlow 流程中采取哪些步骤来获取 LEFT 和 RIGHT 并将它们分别放入数据库中的两个单独的字段中?【参考方案2】:

我什至在我的 SSIS 中都没有找到这个 LEFT 函数,但如果你能详细说明它不允许你做什么,也许有人可以帮助你...

【讨论】:

“LEFT”在较新版本的 SSIS 中 我正在尝试做另一个 DerivedColumn 来获取“RIGHT”。但是因为已经有一个 DerivedColumn 抓住了“LEFT”。 RIGHT 现在不存在...如果我尝试在第一个 DerivedColumn 之后执行另一个 DerivedColumn 来获取 RIGHT,它不会让我添加我需要添加的字段。 想了这么多,我只有 2008 R2 正在运行。无论如何,我在屏幕截图中所做的并不会消耗我正在运行的 [LoginName] 列。我必须查看新的 SSIS 才能弄清楚您的列被消耗的原因。也许在两者上都尝试 SUBSTRING?我一直用它来解析讨厌的文本文件。

以上是关于使用 SSIS 包将一个字段中的值拆分为两个值,以便在 SQL Server 中的两个不同字段中使用的主要内容,如果未能解决你的问题,请参考以下文章

SSIS 多个条件拆分

如何将值字段拆分为水晶报表中的更多字段?

使用SSIS包将csv列转换为表列的日期格式?

Oracle通过一个字段的值将一条记录拆分为多条记录

SSIS 包将文件从一个文件夹移动到 SFTP (WinSCP) 中的另一个文件夹(SSIS 的 SFTP 任务)

oracle 如何将一个字段里的值拆分为多个值显示出来