我需要提取Sharepoint列表数据并将它们导入SQL Server Tables。
我可以使用SSIS数据流(包括派生列和数据转换控件)来完成此操作。 我还能够将单行,多行,日期,查找(单选)数据类型转换为SQL数据类型。
但是现在,我的问题是针对具有多重选择的查找列:
派生列中使用的表达式应该是什么,用于将数据转换为逗号分隔值?
下面的表达式我用来从单一选择的查阅列中获取ID。
SUBSTRING(业务,1,FINDSTRING(业务,“;#”,1) - 1)
如果您看到上面的屏幕截图,则从公共列表输出中,它显示未来风险缓解控制以分号分隔,并在一行中包含多个值。
在Derived列输出中,它仅获取第一个ID并放在Risk Controls列中。
现在问题是:
例如,
ID RiskControls
1 1
1 3
另外,我还有另一个与数据导入相关的问题。
请帮我解决这个问题。
谢谢你, 米塔尔。
答案 0 :(得分:2)
这很奇怪,但今天论坛上还有另一个问题,看起来很相似:How to use Substring in SSIS
我建议解析脚本任务中的控件并将它们分成多行,如果这些对于分析很重要的话。相对而言,在SQL中执行此操作要困难得多。
对于您的其他问题,您可以使用执行SQL任务在数据流执行之前发出Truncate表语句。
答案 1 :(得分:0)
CREATE FUNCTION [dbo].[GetMultiLookupID] ( @Value nvarchar(MAX) ) RETURNS @RtnValue table ( Data int ) AS BEGIN SET @Value = REPLACE(@Value, ';#;#', ';#') Insert Into @RtnValue ([Data]) SELECT a.value FROM ( SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL) ASC) AS Row#, [value] FROM STRING_SPLIT(REPLACE(@Value, ';#', NCHAR(9999)), NCHAR(9999)) ) AS a WHERE Row# % 2 != 0 Return END
SELECT * FROM dbo.GetMultiLookupID('1; #control 1;#3; #control 3')