【问题标题】:SSIS : How to handle Multi select lookup column values to be inserted in SQL Server TableSSIS:如何处理要插入 SQL Server 表中的多选查找列值
【发布时间】:2014-10-30 02:17:33
【问题描述】:

我需要提取 Sharepoint 列表数据并将其导入 SQL Server 表中。

我可以使用包括派生列和数据转换控件的 SSIS 数据流来执行此操作。 我还可以将单行、多行、日期、查找(单选)数据类型转换为 SQL 数据类型。

但现在,我的问题是查找列与多选:

  1. 派生列中用于将数据转换为逗号分隔值的表达式应该是什么?

    下面的表达式我用来从单选的查找列中获取 ID。

    SUBSTRING(Business,1,FINDSTRING(Business,";#",1) - 1)

如果您从公共列表输出中看到上面的屏幕截图,它显示未来风险缓解控制是用分号分隔的,一行中有多个值。

在 Derived 列输出中,它仅采用第一个 ID 并放置在风险控制列中。

现在的问题是:

  • 我们是否应该将这些 ID 以逗号分隔并将其作为 varchar 存储在 SQL 表中?
  • 或者,我们应该用多行来分隔选项。

例如,

ID    RiskControls
 1       1
 1       3

另外,我还有一个关于数据导入的问题。

  1. 我们需要在哪里设置,这个包会删除或删除表的所有现有行并再次插入所有行?

请帮帮我。

谢谢你, 米塔尔。

【问题讨论】:

    标签: sharepoint-2013 ssis


    【解决方案1】:

    这很奇怪,但是今天论坛上还有一个问题,看起来很相似:How to use Substring in SSIS

    如果这些对分析很重要,我建议在脚本任务中解析控件并将它们分成多行。相比之下,在 SQL 中做到这一点要困难得多。

    对于您的其他问题,您可以使用执行 SQL 任务在数据流执行之前发出 Truncate table 语句。

    【讨论】:

      【解决方案2】:
      创建函数 [dbo].[GetMultiLookupID] ( @Value nvarchar(MAX) ) 返回@RtnValue 表 ( 数据整数 ) 作为 开始 SET @Value = REPLACE(@Value, ';#;#', ';#') 插入@RtnValue([数据]) 从( 选择 ROW_NUMBER() OVER(ORDER BY (SELECT NULL) ASC) AS Row#, [价值] FROM STRING_SPLIT(REPLACE(@Value, ';#', NCHAR(9999)), NCHAR(9999)) ) 作为 WHERE 行# % 2 != 0 返回 结尾

      SELECT * FROM dbo.GetMultiLookupID('1;#control 1;#3;#control 3')

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多