如何将一个变量中的一个参数中的多个值传递给SSIS的OLEDB源

时间:2017-07-20 11:56:11

标签: c# sql sql-server ssis

我正在尝试将多个值作为一个参数传递。例如:我需要得到._text_clamp_container { ._clamped_text { ._text_clamp_show_all, ._text_clamp_collapse { background-color: transparent; padding: 0px; margin: 0px; border: none; color: #2369aa; cursor: pointer; &:focus { outline: none; text-decoration: underline; } &:hover { text-decoration: underline; } } } } in(1,2,3,4,5),employeeID字段数据类型为Integer。

查询:

employeeID

我创建一个值为{1}的变量select * from emp where employeeID = ? 并传递OLEDB Source中的参数映射。我可以传递一个值,但我不能传递多个值。

2 个答案:

答案 0 :(得分:0)

一种解决方法是创建一个函数:

CREATE FUNCTION [dbo].[fn_GenerateIDs]
(
 @psCSString VARCHAR(8000)
)
RETURNS @otTemp TABLE(sID VARCHAR(20))
AS
BEGIN
 DECLARE @sTemp VARCHAR(10)

 WHILE LEN(@psCSString) > 0
 BEGIN
  SET @sTemp = LEFT(@psCSString, ISNULL(NULLIF(CHARINDEX(',', @psCSString) - 1, -1),
                    LEN(@psCSString)))
  SET @psCSString = SUBSTRING(@psCSString,ISNULL(NULLIF(CHARINDEX(',', @psCSString), 0),
                               LEN(@psCSString)) + 1, LEN(@psCSString))
  INSERT INTO @otTemp VALUES (@sTemp)
 END

RETURN
END

以格式:'1,2,3,4'

传递时,会返回ID表

如:

select *
from fn_GenerateIDs('1,2,3')

结果:

+----+
| ID |
+----+
| 1  |
+----+
| 2  |
+----+
| 3  |
+----+

然后你必须以varchar格式传递参数:" 1,2,3,4,5" 并将其与Employee表进行比较:

    select * from emp where    
    EXISTS ( select 1 from fn_GenerateIDs('1,2,3') where employeeID = sID)

如果您使用SQL Server 2016,另一个选择是使用新添加的函数STRING_SPLIT

需要2个参数:ID字符串和分隔符

如:

select * from dbo.emp
inner join string_split('1,2,3,4',',') on dbo.emp.employeeID = value

答案 1 :(得分:0)

一个简单的解决方案是使整个查询成为变量。如果您的Mac$ cp -W 1 2; echo $? cp: illegal option -- W usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory 64 变量包含“1,2,3”(顺便说一下,它必须是字符串变量),那么您的@employeeID变量将是:

@SQLQuery

然后在OLEDB源中,使用“从变量查询”选项,并使用"select * from emp where employeeID IN (" + @employeeID +")" 变量作为源。