Sql server where子句中的SSIS逗号分隔字符串
我想看看是否有一个简单的答案。我在SSRS中使用多个拾取下拉参数做了类似的事情,但这似乎有所不同 我的假设是这样的,所以也许有更好的答案 我有一个生产服务器,我不想对其进行任何更改,包括临时表或函数。生产服务器有一个包含约1600条记录的客户机表。我已经设置了一个SSIS包,它允许基于clientid将数据从生产转移到开发人员。所以我的源代码将有一个类似于从表中选择字段的查询,其中ClientId= 这个很好用。现在,我想根据clients表中的数据加载多个客户机。它可以是从客户机中选择ClientId,其中Field=A并返回多个ClientId 我能够将逗号分隔的列表从执行sql任务填充到SSIS变量,因此它可能是1,4,8 如果将源查询更改为在(?)中使用ClientId,则会出现转换错误 我已经看过很多文章,它们提倡一个临时表或一个我想要避免的函数 我曾考虑将整个sql语句构建到一个变量中,但这似乎不是正确的路径,因为我有许多表要查询和传输,其中使用ClientId=?工作正常,无需将每个SQL语句构建为变量 我错过了一个简单的解决办法吗?我现在将把我的研究转向试图找出我是如何在SSRS中做到这一点的,但我认为我应该尝试在这里发布一篇帖子,看看是否有人曾经做到过这一点 谢谢你提供的任何信息 编辑:关键注意的是,客户机上的列在dev服务器上,所以我不能在where子句中使用select,因为该列在生产服务器上不存在 编辑:我没有提到我特别关注将参数映射到的OLEDB源?在sql语句中 编辑:缩小范围,但在关联SSR和SSI功能时遇到问题。在SSRS中,其在以下链接中称为多值参数,关键行为 其中Production.ProductInventory.ProductID位于(@ProductID) 这个看起来也不错 我会继续研究,感谢你迄今为止的帮助 我认为这是最好的总结 此功能仅限于严格使用嵌入式SQL SSRS所做的是将(@value)中的SQL列转换为中的列 (@selectedvalue1、@selectedvalue2)等 你需要忘记关于其他通行方式的一切 列表到SQL,即构建字符串等,并确保声明 数据类型对于参数的值是正确的 您不需要使用连接(参数!,“,”)技巧,除非 您正在将列表传递给存储过程 在这种情况下,您需要使用一些函数来转换分隔符 如您所做,将列表放入行集中 我希望这有帮助Sql server where子句中的SSIS逗号分隔字符串,sql-server,ssis,Sql Server,Ssis,我想看看是否有一个简单的答案。我在SSRS中使用多个拾取下拉参数做了类似的事情,但这似乎有所不同 我的假设是这样的,所以也许有更好的答案 我有一个生产服务器,我不想对其进行任何更改,包括临时表或函数。生产服务器有一个包含约1600条记录的客户机表。我已经设置了一个SSIS包,它允许基于clientid将数据从生产转移到开发人员。所以我的源代码将有一个类似于从表中选择字段的查询,其中ClientId= 这个很好用。现在,我想根据clients表中的数据加载多个客户机。它可以是从客户机中选择Clie
核心问题是我能否在SSIS中获得与SSRS相同的功能。它让我想起了宏替换。如果不想创建函数,可以在t-sql语句中使用以下命令
Declare @ClientIds nvarchar(50) = '123,456'; --<-- Comma delimited list of Client Ids
Select Field
From Table
Where ClientId IN (
SELECT CAST(RTRIM(LTRIM(Split.a.value('.', 'VARCHAR(100)'))) AS INT) ClientIDs
FROM (
SELECT Cast ('<X>'
+ Replace(@ClientIds, ',', '</X><X>')
+ '</X>' AS XML) AS Data
) AS t CROSS APPLY Data.nodes ('/X') AS Split(a)
)
Declare@ClientIds nvarchar(50)='123456'--您有三种选择,使用表值参数而不是分隔列表,使用拆分函数或使用动态sql。这几乎是你唯一的选择。这个看起来很酷,我会试试这个。我只是觉得我在OLEDB源代码中缺少了一些更简单的SSIS参数。我试过了,这是一个很好的解决方案,我可以在其他情况下使用。我觉得这与SSIS参数更相关,在这种情况下不起作用。