我需要将 N 个(大约 50 个)表从源数据库加载到目标数据库。每个表都与其他表不同(因此元数据不同);我想我可以使用父 pkg 来调用子 pkg,其中每个子 pkg 都有简单的结构,例如 DFT 来映射要导入的表。 1 个子 pkg -> 1 个表 -> 1 dft + 父级用来调用 N pkg 的配置表的想法将是一个很好的设计,猜测这样,我可以达到模块化,并且可以添加/删除表容易。糟糕的做法是将所有内容都放在一个带有 DFT 的单一包中......等等
您有任何想法/示例来解决这种情况吗?
马里奥
我非常喜欢使用 biml 来解决此类问题。
- 下载并安装投标助手 http://bidshelper.codeplex.com/
- 将新的 biml 文件添加到现有的 SSIS 项目
- 禁用 Visual Studio 对 XML 文件的自动修复。看克服 Visual Studio 中的 BimlScript 复制和粘贴问题 http://bimlscript.com/Walkthrough/Details/45
- 将此代码粘贴到 Bimlscript.biml 文件中
- 修复源和目标连接字符串(第 8 行和第 9 行)以指向正确的服务器,如果 SQLNCLI11.1 对于您的 SQL Server 版本不正确,则更改提供程序类型
- 右键单击 biml 文件并选择“生成 SSIS 包”
假设一切都已排好,您最终会得到 29 个包,其中有一个数据流任务从源拉到目标(基于 SSIS 变量)。
<#@ template language="C#" hostspecific="true" #>
<#@ import namespace="System.Data" #>
<#@ import namespace="System.Data.SqlClient" #>
<#@ import namespace="System.IO" #>
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<!--
<#
string connectionStringSource = @"Server=localhost\dev2012;Initial Catalog=AdventureWorksDW2012;Integrated Security=SSPI;Provider=SQLNCLI11.1";
string connectionStringDestination = @"Server=localhost\dev2012;Initial Catalog=AdventureWorksDW2012_DEST;Integrated Security=SSPI;Provider=SQLNCLI11.1";
string SrcTableQuery = @"
SELECT
SCHEMA_NAME(t.schema_id) AS schemaName
, T.name AS tableName
FROM
sys.tables AS T
WHERE
T.is_ms_shipped = 0
AND T.name <> 'sysdiagrams';
";
DataTable dt = null;
dt = ExternalDataAccess.GetDataTable(connectionStringSource, SrcTableQuery);
#>
-->
<Connections>
<OleDbConnection
Name="SRC"
CreateInProject="false"
ConnectionString="<#=connectionStringSource#>"
RetainSameConnection="false">
</OleDbConnection>
<OleDbConnection
Name="DST"
CreateInProject="false"
ConnectionString="<#=connectionStringDestination#>"
RetainSameConnection="false">
</OleDbConnection>
</Connections>
<Packages>
<# foreach (DataRow dr in dt.Rows) { #>
<Package ConstraintMode="Linear"
Name="<#=dr[1].ToString()#>"
>
<Variables>
<Variable Name="SchemaName" DataType="String"><#=dr[0].ToString()#></Variable>
<Variable Name="TableName" DataType="String"><#=dr[1].ToString()#></Variable>
<Variable Name="QualifiedTableSchema"
DataType="String"
EvaluateAsExpression="true">"[" + @[User::SchemaName] + "].[" + @[User::TableName] + "]"</Variable>
</Variables>
<Tasks>
<Dataflow
Name="DFT"
>
<Transformations>
<OleDbSource
Name="OLE_SRC <#=dr[0].ToString()#>_<#=dr[1].ToString()#>"
ConnectionName="SRC"
>
<TableFromVariableInput VariableName="User.QualifiedTableSchema"/>
</OleDbSource>
<OleDbDestination
Name="OLE_DST <#=dr[0].ToString()#>_<#=dr[1].ToString()#>"
ConnectionName="DST"
KeepIdentity="true"
TableLock="true"
UseFastLoadIfAvailable="true"
KeepNulls="true"
>
<TableFromVariableOutput VariableName="User.QualifiedTableSchema" />
</OleDbDestination>
</Transformations>
</Dataflow>
</Tasks>
</Package>
<# } #>
</Packages>
</Biml>
此时,您只需弄清楚要如何协调包的执行即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)