SSIS没有不显示服务器名,sql-server-使用SSIS将每个表的数据从服务器A...

我的任务是在SSIS中创建工作流,它将在工作流中将每个表的数据从服务器A复制到服务器B的相同表中.现在,我已停止从A服务器获取数据并将其复制到服务器的步骤B.到目前为止,我已经创建了工作流程,其步骤如下:

>从放置有要处理表名称的Excel文件中读取数据

>将此行插入目标数据库(服务器B)中以备将来使用

>在以上步骤中连接到下一个对象的控制流中-执行SQL任务,在该任务中,我将从表中获取的所有已加载名称都命名为名为“ GlobalListOfTables”的全局项目变量.

>创建了另一个变量“ localTable”,在其中存储“ GlobalListOfTables”变量/集合的每一行,稍后将在“ FOR LOOP”中使用它.

在这里,我已停止,我想做的是:

>在此LOOP中,使用创建的“ localTable”变量从每个表的源服务器获取所有数据,然后将所有数据插入到目标服务器中,并将其插入与“ localTable”变量相同的表名中.

最后一点5让我有些困惑,因为桌子之间会有所不同,因此没有任何一种桌子打孔的模式.

有人可以让我知道如何在SSIS中进行操作,以及应该从可用列表中采取哪种控制措施以达到第5点?

最佳答案

您可以使用脚本任务中的C#SMO对象来进行动态表列表的传输.不需要SSIS循环. SSIS对象变量(GlobalListOfTables)将需要包含在脚本任务的ReadOnlyVariables字段中.除了下面列出的内容之外,请确保将Microsoft.SqlServer.SmoExtended和Microsoft.SqlServer.ConnectionInfo引用添加到脚本任务.

using System.Data;

using Microsoft.SqlServer.Management.Smo;

using System.Collections.Generic;

using System.Data.OleDb;

string databaseName = "DatabaseName";

List tableNames = new List();

DataTable dt = new DataTable();

OleDbDataAdapter dataAdapter = new OleDbDataAdapter();

//get table names from SSIS object variable

dataAdapter.Fill(dt, Dts.Variables["User::SourceServerName"].Value);

//populate list

foreach (DataRow dr in dt.Rows)

{

tableNames.Add(dr[0].ToString());

}

//create source server object

Server srcServ = new Server(@"SourceServerName");

srcServ.ConnectionContext.LoginSecure = true;

srcServ.ConnectionContext.StatementTimeout = 600;

srcServ.ConnectionContext.Connect();

//define source database as smo object

Database sourceDatabase = srcServ.Databases["SourceDatabaseName"];

Transfer transfer = new Transfer();

transfer.Database = sourceDatabase;

//set destination server and database

transfer.DestinationServer = @"DestinationServerName";

transfer.DestinationDatabase = databaseName;

//overwrite objects if they exist

transfer.DropDestinationObjectsFirst = true;

transfer.CopyAllObjects = false;

transfer.CopySchema = true;

//include data

transfer.CopyData = true;

foreach (Table t in sourceDatabase.Tables)

{

//extract table names that were originally in SSIS object variable and avoid system objects

if (tableNames.Contains(t.Name) && !t.IsSystemObject)

{

transfer.ObjectList.Add(t);

}

}

//transfer objects

transfer.TransferData();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值