ssis将N个表从源服务器加载到目标服务器的最佳实践

2024-06-26

我需要将 N 个(大约 50 个)表从源数据库加载到目标数据库。每个表都与其他表不同(因此元数据不同);我想我可以使用父 pkg 来调用子 pkg,其中每个子 pkg 都有简单的结构,例如 DFT 来映射要导入的表。 1 个子 pkg -> 1 个表 -> 1 dft + 父级用来调用 N pkg 的配置表的想法将是一个很好的设计,猜测这样,我可以达到模块化,并且可以添加/删除表容易。糟糕的做法是将所有内容都放在一个带有 DFT 的单一包中......等等 您有任何想法/示例来解决这种情况吗? 马里奥


我非常喜欢使用 biml 来解决此类问题。

  1. 下载并安装投标助手 http://bidshelper.codeplex.com/
  2. 将新的 biml 文件添加到现有的 SSIS 项目
  3. 禁用 Visual Studio 对 XML 文件的自动修复。看克服 Visual Studio 中的 BimlScript 复制和粘贴问题 http://bimlscript.com/Walkthrough/Details/45
  4. 将此代码粘贴到 Bimlscript.biml 文件中
  5. 修复源和目标连接字符串(第 8 行和第 9 行)以指向正确的服务器,如果 SQLNCLI11.1 对于您的 SQL Server 版本不正确,则更改提供程序类型
  6. 右键单击 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(使用前将#替换为@)

ssis将N个表从源服务器加载到目标服务器的最佳实践 的相关文章

  • 更新查询时 ios 中出现“数据库锁定”错误

    我正在使用下面的代码更新查询 using sqlite 但我越来越 database is locked error 我尝试搜索一些 SO 链接 建议关闭数据库 但我再次执行此操作时遇到相同的错误 我已经提到过代码中出现错误的地方 cons
  • SQL Server XQuery 返回错误

    我正在 SQL Server 2012 中对 XML 数据类型列执行查询 数据示例如下
  • 使用 CASE 语句的多个条件

    我需要查询一些数据 这是我构建的查询 但对我来说效果不佳 在本示例中 我使用 AdventureWorks 数据库 SELECT FROM Purchasing Vendor WHERE PurchasingWebServiceURL LI
  • 选择仅属于特定部门的用户

    我有下表 其中包含两个字段 即 a 和 b 如下所示 create table employe empID varchar 10 department varchar 10 插入一些记录 insert into employe values
  • 如何获取表中所有列的计数(*)?使用 PostgreSql

    我有一堆表 其中几个有数百列 我需要获取每列的非空值计数 并且我一直在手动执行此操作 我想找出一种方法来获取表中所有列的所有计数 我查了 stackoverflow 和 google 但找不到答案 我尝试了这个 但它只是为每列返回 1 的值
  • 将多个表中的数据获取到单行中,同时连接一些值

    我正在尝试从表中检索数据并将多行合并为一列 而不重复任何信息 我有以下表格 简介 资格 项目 Profile pro id surname firstname 1 John James 2 King Fred 3 Luxury Yachts
  • 非数字列中的 SQL MAX 函数

    据我了解 MAX 函数 它应返回给定列的最大值 对于数值 例如工资列 对我来说很清楚 这是我在教程中找到的唯一应用程序 但是 我无法理解它在非数字列的情况下如何工作 我的问题源于这个练习 在 sql ex ru 上 找出只生产同类型型号的制
  • 原则 2 使用 LIKE 进行查询

    我有这个查询代码 repository em gt getRepository AcmeCrawlerBundle Trainings query repository gt createQueryBuilder p gt where p
  • 哪个 SQL 语句更快? (有与在哪里......)

    SELECT NR DZIALU COUNT NR DZIALU AS LICZ PRAC DZIALU FROM PRACOWNICY GROUP BY NR DZIALU HAVING NR DZIALU 30 or SELECT NR
  • 在 CodeIgniter、SQL 中调用布尔值的成员函数 result()

    我试图根据搜索关键字查看 data results 中有哪些数据 但每次都会出现上述致命错误 有人可以帮助我吗 我的控制器 public function execute search search term this gt input g
  • 具有多个表的 SQL select 语句

    给出以下两个表 Person table id pk first middle last age Address table id pk person id fk person id street city state zip 如何创建返回
  • 从 SQL 数据库反序列化数据

    我有一个小应用程序 由数据库支持 SQLite 但它与问题并不真正相关 我定义了一些类型 例如 data Whatever Whatever Int Int String String data ImportantStuff Importa
  • 使用递归 CTE 生成嵌套第 n 层 JSON SQL Server

    我有以下结构的数据 我想使用父属性 id 关系生成嵌套 JSON 所需的输出 propertyID 1 title foo class typeid 150 value bar children propertyID 2 title foo
  • End using 是否关闭打开的 SQL 连接

    如果我将 SQLConnection 包装在 using 中 我应该关闭它还是最终 using 处理它 using cn as new system data sqlclient sqlconnection cn open do a bun
  • 限制 SQL 查询的响应时间

    我在这里发布了一个关于我的 gridview 绑定的问题 将GridView与多条记录绑定 https stackoverflow com questions 5599704 bind gridview with many records
  • 通过sql视图向多个表插入数据

    mysql 有没有办法通过视图向多个表插入数据 MySQL 参考手册对于可更新视图是这样说的 一些视图是可更新的 也就是说 您可以在诸如以下的语句中使用它们UPDATE DELETE or INSERT更新基础表的内容 为了使视图可更新 必
  • Oracle TO_DATE 函数中跳过字符

    我正在导入 tsv 中具有 SQL Server 格式日期的数据 yyyy mm dd hh24 mi ss mmm 使用 SQL Developer 的导入数据向导导入 Oracle 数据库 我怎样才能忽略 mmm用于将它们导入 DATE
  • 计算给定小时内使用了多少分钟

    给定开始和结束时间 我想知道给定时间内有多少分钟 create function CalcMinsInHour start datetime end datetime hour int returns int as begin Lookin
  • 如何使用 SQL 计算一条路线的行驶次数?

    我需要确定在给定的日期范围内每辆车行驶特定路线的次数 但建立在数据库之上的 GPS 管理软件没有此功能 该数据库包含多个存储 GPS 路线和位置数据的表 路线由多个位置和序列号组成 位置是附加到名称的一组上限和下限纬度 经度值 车辆每分钟将
  • 从条件表中获取 WHERE 子句的条件

    我创建了以下简单的DataModel 我用以下数据填充了表格 1 桌子Customer INSERT INTO test customer CustomerName Country RegistrationDate VALUES Custo

随机推荐