Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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
ssis超过4000个字符_Ssis - Fatal编程技术网

ssis超过4000个字符

ssis超过4000个字符,ssis,Ssis,我的来源-甲骨文; 目标-SQL Server 要求-我必须从目标服务器获取empid,并将相同的empid传递给oracle并获取数据 方法,我正在使用…我正在构建一个由包含empid的-1,2,3,…10000分隔的字符串逗号。字符串的长度可能会在将来增加。如何将此字符串传递给oracle和变量中的数据流任务。这意味着,在DFT中,我从变量中选取这个字符串,类似于这样的…从emp中选择*empid在其中 +@[user::empid]+ 挑战-我知道表达式限制是4000。如何再次将4000多

我的来源-甲骨文; 目标-SQL Server

要求-我必须从目标服务器获取empid,并将相同的empid传递给oracle并获取数据

方法,我正在使用…我正在构建一个由包含empid的-1,2,3,…10000分隔的字符串逗号。字符串的长度可能会在将来增加。如何将此字符串传递给oracle和变量中的数据流任务。这意味着,在DFT中,我从变量中选取这个字符串,类似于这样的…从emp中选择*empid在其中 +@[user::empid]+

挑战-我知道表达式限制是4000。如何再次将4000多次发送到数据流任务。我无法进行用户合并、查找或forloop,因为这会影响性能。我也在这里发布了

在2012版SQL Server Integration Services中删除的仅适用于表达式

因此,如果必须通过将所有这些用户ID连接在一起来构建源查询,从而沿着当前的路线前进,请停止使用表达式,并在脚本任务中执行字符串连接

代码近似值

Dts.Variables[SourceQuery].Value = string.Format("select * from dept where dept in ({0}), Dts.Variables[EmpList].Value.ToString());
POC 我创建了一个简单的包。连接到数据流的脚本任务,其变量定义为QuerySource,并使用以下逻辑生成一个长字符串,然后该字符串将对表进行查询

            // 551 characters
            string baseQuery = @"
SELECT
    AC.object_id
,   AC.name
,   AC.column_id
,   AC.system_type_id
,   AC.user_type_id
,   AC.max_length
,   AC.precision
,   AC.scale
,   AC.collation_name
,   AC.is_nullable
,   AC.is_ansi_padded
,   AC.is_rowguidcol
,   AC.is_identity
,   AC.is_computed
,   AC.is_filestream
,   AC.is_replicated
,   AC.is_non_sql_subscribed
,   AC.is_merge_published
,   AC.is_dts_replicated
,   AC.is_xml_document
,   AC.xml_collection_id
,   AC.default_object_id
,   AC.rule_object_id
,   AC.is_sparse
,   AC.is_column_set
FROM
    sys.all_columns AS AC
WHERE
    AC.object_id IN (0{0});";
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            for (int i = 0; i < 1000; i++)
            {
                sb.Append(',');
                sb.Append(i);
            }
            string queryFinal = string.Format(baseQuery, sb.ToString());
            MessageBox.Show(queryFinal.Length.ToString());
            Dts.Variables["QuerySource"].Value = queryFinal;
执行时,这里有一个屏幕截图,显示变量/查询中大于4k的字符

在我的数据流中,我使用变量中的SQL命令,因为这是唯一有意义的事情,因为我们使用的是变量


同意我必须使用脚本组件。但如何将此字符串发送到ole db microsoft oracle提供程序?在数据流任务中,在源代码中,我选择了select access mode=from变量,在这里我必须选择它。在这方面,如何表达,将采取超过4000个字符?