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

问题描述 投票:0回答:3

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

我需要一个通用的 SSIS 包,它将 procedure_name、output_filename 作为输入并生成输出文本文件。

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

例如:proc1 产生以下结果

第 1 列|第 2 列

a|b

proc2 产生以下结果:

列1|列2|列3

1|2|一个

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

'col1|col2|cole' AS 行数据

'1|2|a' AS 行数据

然而,程序较多,更改每个程序会花费大量时间,并且可能最终会出现人为错误。

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

sql sql-server ssis
3个回答
1
投票

您可以查看 BiML,它使用元数据动态构建然后执行包。


0
投票

这在传统的 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);  

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


0
投票

'ai créé un package de UpSert dans SSIS car j'ai un gros fichier csv (BigData) Je n'ai pas fait de recherche de tâche et oledbCommand , j'ai travaillé avec une table intermédiaire.将数据包转移到数据库中的 csv 与 SQL 快速服务器表中可能会遇到问题,请注意将数据包转移到数据表和数据库基础上,我决定将数据包打包一般情况下,在文件平面和表中动态映射表可能会导致表和链的配置以及连接和映射通过文件 xml ( config.xml ) 进行映射,但我不认为注释是正确的ce faisable si oui comment je vais le faire s'il y a un tuto dessus Merci de votre aide

© www.soinside.com 2019 - 2024. All rights reserved.