Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 使用多个过程创建输出文本文件的通用ssis包_Sql_Sql Server_Ssis - Fatal编程技术网

Sql 使用多个过程创建输出文本文件的通用ssis包

Sql 使用多个过程创建输出文本文件的通用ssis包,sql,sql-server,ssis,Sql,Sql Server,Ssis,我有几个产生输出的过程(sql server),我手动将它们保存在带有标题的文本文件中 我需要一个通用的SSIS包,它将过程名称、输出文件名作为输入,并生成输出文本文件 由于不同的过程产生不同的列,我需要动态处理元数据 例如:proc1产生以下结果 col1 | col2 a | b proc2产生以下结果: col1 | col2 | col3 1 | 2 | a 一种解决方案是将所有过程更改为将输出生成为一行,因此SSIS将其视为一列并生成输出文件。 例: “col1 | col2 | co

我有几个产生输出的过程(sql server),我手动将它们保存在带有标题的文本文件中

我需要一个通用的SSIS包,它将过程名称、输出文件名作为输入,并生成输出文本文件

由于不同的过程产生不同的列,我需要动态处理元数据

例如:proc1产生以下结果

col1 | col2

a | b

proc2产生以下结果:

col1 | col2 | col3

1 | 2 | a

一种解决方案是将所有过程更改为将输出生成为一行,因此SSIS将其视为一列并生成输出文件。 例:

“col1 | col2 | cole”作为行数据

“1 | 2 | a”作为行数据

然而,有相当多的程序,更改每个程序将花费大量时间,并可能最终导致人为错误


所以,我想知道,在SSIS中是否有一种方法,我可以动态处理元数据并生成输出文件。

好吧,在传统的SSIS包中,这几乎是不可能的,在传统的SSIS包中,所有输出都在设计时定义,并在运行时验证。更改其编号会导致验证错误并停止包执行。
您可以使用SQL执行任务和脚本组件玩把戏。Exec SQL运行SP并将SP结果作为存储在对象变量中的“完整结果集”返回。然后在脚本任务中打开这个变量,它实际上是一个ADO记录集;它可以由System.Data.OleDb.OleDbDataAdapter读取。例如:

// Set up the DataAdapter to extract the data,  
// and the DataTable object to capture those results  
OleDbDataAdapter da = OleDbDataAdapter(); 
DataTable dt = DataTable();
// Extract the data from the object variable into the table 
da.Fill(dt, Variables.vResults);  

然后,您可以使用数据集并将其展平为单个变量以供以后使用。或者-直接用C#脚本创建并保存文件。

您可以研究BiML,它使用元数据动态构建并执行包。

我是C#的新手。有超过1000万条记录,但不确定脚本如何处理如此大量的数据。此外,将所有这些数据都放在一个变量中会让人感到害怕。@Ash,对象变量中的10M记录以及以后的C#script解析都可以。问题在于您的目标和SSI作为工具。如果您想要一个运行SP并将其结果存储在一个几乎不需要转换的文件中的通用SP处理器,那么纯C#将更简单。您可以尝试使用SQL中的SQLCMD或BCP实用程序。如果您需要转换某些固定布局数据,SSIS将大放异彩;它允许在可视化工具中设计大多数数据转换。您的任务更加简单和通用-SSIS的优势变成了负担。感谢您的回复Ferdipux。感谢您的回复Ferdipux。使用SSI没有严格的规则,如果这可以在C#中实现,我很高兴。我对VisualBasic知之甚少,尝试将SSIS与之结合并生成一个输出文件,但没有效果。这是我试过的。执行sql任务(将结果集存储在var#U文件变量中)->脚本任务(使用var#U文件变量生成输出文件)由于我将babysteps保存在C#中,您介意为上述内容共享一段C#代码吗?@Ash,您可以使用Visual Basic编写脚本任务,它可以在设计时选择,请参阅脚本任务的
ScriptLanguage
下拉列表。感谢您为我打开BiML之门。我完全没有意识到这一点。由于我需要花一些时间来尝试一些脚本并了解BiML是如何工作的,是否有任何直接链接/脚本可以回答我的问题?稍微相似的脚本也可以。不,不幸的是,我没有直接解决您的问题的快捷方式。只是BiML可以带来一个解决方案。