2

该查询仅用于插入新记录。

如何使用此查询?sql 脚本是否在执行 SQL 任务:SQL 命令任务或 OLE DB 源:使用 4 个不同的数据源(数据库)如数据库 A、B、C 和 D 时的 SQL 命令任务。

在解决方案资源管理器下的数据源中,我在一台服务器下添加了四个数据库,分别是数据库A、B、C和D。是否可以在OLE DB连接管理器中添加四个具有四个对应数据源的数据库?

OLE DB connection manager: Database/Data Source A, B, C, D <--- Is this possible??
Data Access Mode:
SQL Command

    SQL Command Text:

    Insert into DWResourceTask.dbo.DimEntity

    select 
    a.EntCode, 
    a.Name, 
    a.Active, 
    a.AccessLevel, 
    a.SiteURN, 
    a.CompanyURN,
    a.SiteName, 
    a.SiteDesc, 
    a.SiteURL
    from 
    (Select e.EntCode, e.Name, e.Active, e.AccessLevel, ss.SiteURN, ss.CompanyURN,
    ss.SiteName, ss.SiteDesc, ss.SiteURL
    from A.dbo.Site ss, A.dbo.LegalEnt e
    where ss.localsiteflag = 1
    and e.active = 1

    UNION ALL
    Select e.EntCode, e.Name, e.Active, e.AccessLevel, ss.SiteURN, ss.CompanyURN,
    ss.SiteName, ss.SiteDesc, ss.SiteURL
    from B.dbo.Site ss, B.dbo.LegalEnt e
    where ss.localsiteflag = 1
    and e.active = 1

    UNION ALL
    Select e.EntCode, e.Name, e.Active, e.AccessLevel, ss.SiteURN, ss.CompanyURN,
    ss.SiteName, ss.SiteDesc, ss.SiteURL
    from C.dbo.Site ss, C.dbo.LegalEnt e
    where ss.localsiteflag = 1
    and e.active = 1

    UNION ALL
    Select e.EntCode, e.Name, e.Active, e.AccessLevel, ss.SiteURN, ss.CompanyURN,
    ss.SiteName, ss.SiteDesc, ss.SiteURL
    from D.dbo.Site ss, D.dbo.LegalEnt e
    where ss.localsiteflag = 1
    and e.active = 1
    )a

    where not exists (select * from DWResourceTask.dbo.DimEntity w
                      where(a.EntCode=w.EntCode
                            and a.Name=w.Name
                            and a.Active=w.Active
                            and a.AccessLevel=w.AccessLevel
                            and a.SiteURN=w.SiteURN
                            and a.CompanyURN=w.CompanyURN
                            and a.SiteName=w.SiteName
                            and a.SiteDesc=w.SiteDesc
                            and a.SiteURL=w.SiteURL))

请帮忙。提前致谢!

4

3 回答 3

3

我将为您详细说明数据流任务。希望这会有所帮助。

  1. 将数据流任务放入您的工作流程。下面我的称为“将 CSV 加载到 SQL RawData 表”。

在此处输入图像描述

  1. 在数据流任务中,添加您的源(源)和目标。这些可以是平面文件、数据库连接等。在此处输入图像描述

  2. 在源中,选择要包括的连接和列。在此处输入图像描述

  3. 打开您的目的地并选择数据将要发送到的连接和表。在此处输入图像描述

  4. 接下来,将源列映射到目标列。您可以手动执行此操作,也可以通过右键单击并匹配名称来执行此操作。这就是那个连接。 在此处输入图像描述

  5. 作为整个流程的一部分,对您的其他来源和目的地重复此过程。

  6. 测试您的 SSIS 包,然后进行部署。

于 2013-11-08T21:06:39.337 回答
0

这不是您实现的目标Execute SQL Task!但是可以很容易地做到这一点Data Flow Task,这就是 SSIS 的主要思想——避免如此复杂的 SQL 表达式。

  1. 为每个数据库 A、B、C、D、DWResourceTask、Destination 创建连接

  2. 为每个数据库放置单独的数据源:A、B、C、D。用 select 语句和Union All它们全部填充。

  3. where not exists部分可以通过查找 DWResourceTask.dbo.DimEntity 来完成。No match output会给你适当的记录。

  4. 将数据目标和直接上方的行放入其中。

于 2013-11-08T08:12:42.530 回答
0

我创建了一个查看两个来源的视图,然后该视图成为我的单一来源。

我宁愿让 SQL Server 为我做艰苦的工作,让 SSIS 来做数据传输..

于 2015-11-09T18:29:53.183 回答