SSIS - 使用 foreach 循环容器在传输后更新记录

2024-04-04

我们正在使用 SSIS 将 3 个表的内容从服务器传输到服务器

ServerA 位于内部,ServerB 位于数据中心。 从 ServerA 到 ServerB 存在 VPN 连接,反之亦然。 出于安全原因,我们希望删除 ServerB“查看”ServerA 的能力

当前的 SQL select 语句如下所示:

SELECT * FROM ServerB.OrderTable WHERE NOT IN ServerA.OrderTable

(我很欣赏语法已关闭)

然后将这些记录插入到 ServerA.OrderTable 上(该表是相同的)

这非常有效 - 只传输不在 ServerA 中的记录

然而,这需要ServerB知道ServerA 我建议做的是在每个表上放置一个“Transferred”位列,并循环遍历每个记录,将 Transferred 设置为 true。

这样,上面提到的 SQL 语句就可以改为:

SELECT * FROM ServerB.OrderTable WHERE Transferred = 0

我的问题是,如何去做呢? 有人告诉我 foreach 循环容器可以做到这一点,但我在任何地方都找不到...... 有人能指出我正确的方向吗


也许您现在已经找到了问题的答案。这个答案是为了帮助其他可能偶然发现这个问题的人。这是一个可能的选项,可用于解决使用 SSIS 的数据传输问题。我假设您仍然可以从 SSIS 包创建指向服务器 A 和 B 的连接字符串。如果这个假设是错误的,请告诉我,以便我删除这个答案。在这个例子中,我使用SQL Server 2008 R2作为后端。由于我没有两台服务器,因此我在不同的位置创建了两个相同的表Schemas ServerA and ServerB.

分步过程:

  1. In the Connection managerSSIS 部分,创建两个 OLE DB 连接,即ServerA and ServerB。此示例指向同一台服务器,但在您的场景中,连接需要指向两个不同的服务器。参考截图#1.

  2. 创建两个模式ServerA and ServerB。创建表dbo.ItemInfo在这两个模式中。为这些表创建脚本如下Scripts部分。同样,这些对象仅用于本示例。

  3. 我已经用一些示例数据填充了这两个表。桌子ServerA.ItemInfo包含2,222 rows和桌子ServerB.ItemInfo包含10,000 rows。根据问题,失踪的7,778行应该从ServerB to ServerA。参考截图#2.

  4. 在 SSIS 包的控制流选项卡上,放置一个数据流任务,如屏幕截图所示 #3.

  5. 双击数据流任务以导航到数据流选项卡并按如下所述配置数据流任务。Server B is an OLE DB Source; 在服务器A中查找记录 is a Lookup transformation task and Server A is an OLE DB Destination.

  6. 配置OLE DB Source Server B如截图所示#4 and #5.

  7. 配置Lookup transformation task 在服务器A中查找记录如截图所示#6 - #8。在此示例中,ItemId 是唯一键。因此,该列用于搜索两个表之间丢失的记录。因为我们只需要不存在于的行Server A,我们需要选择选项Redirect rows to no match output.

  8. Place a OLE DB Destination关于数据流任务。当您将查找转换任务与 OLE DB 目标连接时,系统将提示您Input Output Selection对话。选择Lookup No Match Output从屏幕截图所示的对话框中 #9。配置OLE DB Destination Server A如截图所示#10 and #11.

  9. 配置数据流任务后,它应该如屏幕截图所示#12.

  10. 包的执行示例如屏幕截图所示#13。正如你所注意到的,失踪的7,778 rows已转自Server B to Server A。参考截图#14查看包执行后的表记录数。

  11. 由于要求只是插入缺失的记录,因此使用了这种方法。如果您想更新现有记录并删除不再有效的记录,请参阅我在本节中提供的示例关联。 SQL 集成服务加载制表符分隔文件? https://stackoverflow.com/questions/6061075/sql-integration-services-to-load-tab-delimited-file/6159600#6159600链接中的示例显示了如何将平面文件传输到 SQL,但它会更新现有记录并删除无效记录。此外,该示例经过微调以处理大量行。

希望有帮助。

Scripts

.

CREATE SCHEMA [ServerA] AUTHORIZATION [dbo]
GO

CREATE SCHEMA [ServerB] AUTHORIZATION [dbo]
GO

CREATE TABLE [ServerA].[ItemInfo](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ItemId] [varchar](255) NOT NULL,
    [ItemName] [varchar](255) NOT NULL,
    [ItemType] [varchar](255) NOT NULL,
    CONSTRAINT [PK_ItemInfo] PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [UK_ItemInfo_ItemId] UNIQUE NONCLUSTERED ([ItemId] ASC)
) ON [PRIMARY]
GO

CREATE TABLE [ServerB].[ItemInfo](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ItemId] [varchar](255) NOT NULL,
    [ItemName] [varchar](255) NOT NULL,
    [ItemType] [varchar](255) NOT NULL,
    CONSTRAINT [PK_ItemInfo] PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [UK_ItemInfo_ItemId] UNIQUE NONCLUSTERED ([ItemId] ASC)
) ON [PRIMARY]
GO

屏幕截图#1:

屏幕截图#2:

屏幕截图#3:

屏幕截图#4:

屏幕截图#5:

屏幕截图#6:

屏幕截图#7:

屏幕截图#8:

屏幕截图#9:

屏幕截图#10:

屏幕截图#11:

屏幕截图#12:

屏幕截图#13:

屏幕截图#14:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSIS - 使用 foreach 循环容器在传输后更新记录 的相关文章

  • 如何获取sql server 2005中数据库连接的详细列表?

    如何获取sql server 2005中数据库连接的详细列表 使用系统存储过程sp who2
  • FROM 子句中子查询末尾随机字母的含义 - SQL

    我终于成功将两个sql sum查询的结果求和了 这家伙迈出了一小步 我的问题与代码中的最后一个字符 Z 有关 SELECT SUM hr FROM SELECT SUM amount AS hr FROM Try again dbo tue
  • 比较 2 个 linq 应用程序:意外结果

    我起草了2 ASP NET应用程序 using LINQ 一个连接到微软SQL服务器 另一个对某些专有内存结构 这两个应用程序都可以使用以下表格3 个 int 字段 有500 000 条记录 内存结构与 SQL Server 表相同 使用的
  • 为什么 Sql Server 2000 上的 TSQL 对小数点的舍入不一致?

    我正在尝试计算美元金额的折扣百分比 在 50 的情况下 有时你会得到半分钱 我需要将其四舍五入到最接近的一分钱 在Sql中 我的计算如下 round retail 0 5 2 0 如果我采用以下值 我会得到不同的结果 4 39 2 49 不
  • 如何在 SQL Server 2005 Management Studio 中创建 SQL Server 2005 存储过程模板?

    如何在 SQL Server 2005 Management Studio 中创建 SQL Server 2005 存储过程模板 我认为另一个小金块将帮助人们开发并提高数据库开发的效率 当我开发软件解决方案时 我非常喜欢存储过程和函数 我喜
  • 为表多次指定了 xxx 列

    我正在尝试将 db2 简单查询调整为 SQL SERVER 该查询在 db2 上运行良好 select from pb console users u join select from pb console users user role
  • 从变量使用 OLE DB 源命令的 EzAPI 等效项是什么?

    tl dr 使用 来自变量的 SQL 命令 数据访问模式的 OLE DB 源并分配变量的 EzAPI 代码是什么 Preamble 每月一次 我们需要使用生产数据的子集刷新我们的公共测试站点 我们已确定 根据我们的需求 SSIS 解决方案最
  • 没有特定表的MSSQL数据库备份

    我需要在 sql 中没有特定表的情况下进行计划备份 因为如果我对该表进行备份 将需要很长时间 我需要从备份中排除一张表 是否可以 如果没有该表 所有表和数据都应该位于数据库中 除了 PRIMARY 文件组之外 您还可以为该表设置一个单独的文
  • 为什么 SQL Server 不推荐使用 SET ANSI_PADDING OFF?

    根据 MSDN BOL 在线书籍 SET ANSI PADDING http msdn microsoft com en us library ms187403 aspx 在 Microsoft SQL Server 的未来版本中 ANSI
  • 将 Mdb 转换为 Sql Server

    如何使用 C 或其他语言将 mdb 访问文件转换为 sql server 我找到了一个article http channel9 msdn com forums TechOff 234266 Convert MS Access DB to
  • .net 应用程序中的内存泄漏

    我正在 VB net 2005 中开发一个桌面应用程序 该应用程序包含一个间隔为 1 分钟的计时器 每次计时器计时 就会执行一组函数 大部分与数据库相关 最初 应用程序运行良好 在进程 任务管理器 中 每次调用计时器时 CPU 使用率都会达
  • EF4 和 SQL Server 2000

    我使用 EF4 和 SQL Server 2005 开发了我的网站 但当转移到临时站点时 发现他们使用 SQL Server 2000 现在我收到此错误 我认为该错误与 SQL Server 2000 有关 Incorrect syntax
  • SQL中等连接和内连接的区别

    我有 2 个表 名为 table123 and table246 table123 列 ID Dept ID 名 Surname Salary Address table246 列 Dept ID 部门名称 我想找到每个部门工资最低的员工列
  • 查找 SQL Server 中表的 B 树高度

    由于数据库数据以B Tree的形式组织在8k页中 对于PK信息也是如此 数据库中的每个表都应该可以计算B Tree的高度 从而揭示达到某些数据需要多少次跳跃 由于行大小和 PK 大小都非常重要 因此很难计算 因为例如varchar 250
  • 不同提供商的相同 EDMX 文件

    我正在开发一个项目 其中有一个本地数据库 SQL CE 在不存在与服务器的连接的情况下用作缓冲区 在服务器上我想使用相同的数据库布局 当然 我想使用服务器和客户端上可用的 Common dll 中的相同 EDMX 文件 在客户端中 我有一个
  • TSQL:无法对 COUNT(*) 执行聚合函数 AVG 来查找一天中最繁忙的时间

    考虑一个保存日志数据的 SQL Server 表 重要的部分是 CREATE TABLE dbo CustomerLog ID int IDENTITY 1 1 NOT NULL CustID int NOT NULL VisitDate
  • 如何在 SQL Server 2008 中使用 GUID 数据类型?

    我想使用建立一个员工表SQL SERVER 2008 在我的表中 我希望为每个员工提供一个 ID 我听说过GUID我有点明白它是一种数据类型 但我无法使用它 你能告诉我使用它的方法吗 顺便说一句 假设我想要这样的东西 CREATE TABL
  • 在 nhibernate 标准中使用内置的 sql“转换”函数

    我想利用 SQL Server 2008 中的 Convert 函数 以便可以在 DateTime 列上进行搜索 建议的 SQL 看起来像这样 SELECT list of fields FROM aTable WHERE CONVERT
  • 导入到 SQL Server 时忽略 Excel 文件中的列

    我有多个具有相同格式的 Excel 文件 我需要将它们导入 SQL Server 我当前遇到的问题是 有两个文本列我需要完全忽略 因为它们是自由文本 并且某些行的字符长度超出了服务器允许我导入的长度 这会导致截断错误 因为我的分析不需要这些
  • SQL Server查询麻烦,多对多关系

    不知道如何用一行字来表达这个问题 对标题表示歉意 我的数据库中有3个表 例如 Shop Item 商店库存 Shop 和 Item 具有多对多关系 因此 ShopStock 表将它们链接起来 ShopStock 中的字段是 ID ShopI

随机推荐