Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server where子句中的SSIS逗号分隔字符串_Sql Server_Ssis - Fatal编程技术网

Sql server where子句中的SSIS逗号分隔字符串

Sql server where子句中的SSIS逗号分隔字符串,sql-server,ssis,Sql Server,Ssis,我想看看是否有一个简单的答案。我在SSRS中使用多个拾取下拉参数做了类似的事情,但这似乎有所不同 我的假设是这样的,所以也许有更好的答案 我有一个生产服务器,我不想对其进行任何更改,包括临时表或函数。生产服务器有一个包含约1600条记录的客户机表。我已经设置了一个SSIS包,它允许基于clientid将数据从生产转移到开发人员。所以我的源代码将有一个类似于从表中选择字段的查询,其中ClientId= 这个很好用。现在,我想根据clients表中的数据加载多个客户机。它可以是从客户机中选择Clie

我想看看是否有一个简单的答案。我在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,即构建字符串等,并确保声明 数据类型对于参数的值是正确的

您不需要使用连接(参数!,“,”)技巧,除非 您正在将列表传递给存储过程

在这种情况下,您需要使用一些函数来转换分隔符 如您所做,将列表放入行集中

我希望这有帮助


核心问题是我能否在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参数更相关,在这种情况下不起作用。