【问题标题】:How to add a Select query that needs 2 dbs to a package?如何将需要 2 个数据库的 Select 查询添加到包中?
【发布时间】:2014-09-05 23:24:22
【问题描述】:

我正在使用数据流任务更新现有包。目前,此数据流任务有 2 个步骤:

  1. OLE DB Source 指向一个源连接并包含一个 sql 查询
  2. OLE DB 目标

我需要使用更复杂的查询来更新 OLE DB 源,该查询连接来自 2 个不同数据库的数据。此查询已经构建,并且有一个 Group By 子句、4 或 5 个 Where 条件和一个用于引导的 Order by 子句。手动运行时它就像一个魅力。问题是 OLE DB Source 只允许 1 个数据连接。

根据我在网上的searches,我需要创建 2 个不同的数据源,然后使用 Merge Join 步骤将它们合并。但是,这看起来我需要通过一系列步骤有效地重建我的整个查询。我宁愿不这样做。

有没有办法让我将我的 Select 查询(同样从 2 个 DB 中提取)复制并粘贴到包中,而无需完全重建它?

【问题讨论】:

  • 您可以充当单个连接,但您可能必须使“其他”数据库对“第一个”数据库可见。您可以添加一组指向“其他”数据库对象的同义词。然后,您可以在使用同义词和内部对象的“第一个”数据库中编写查询。这就像一个单一的访问点。然而,该解决方案将带来安全性和架构方面的影响。无论如何希望它有所帮助..
  • 数据库链接对这样的事情有用吗? docs.oracle.com/cd/B28359_01/server.111/b28310/…
  • 加入两个db没有问题。如果它在 SSMS 中手动运行时工作,那么它应该在 OLEDB 源中工作。你得到什么实际错误?
  • @ElectricLlama,抱歉让您久等了。我不得不暂时搁置一下。奇怪的是我完全没有错误,它只返回 0 条记录。在 SSMS 中运行完全相同的查询会返回 80 多条记录。可能是因为我的包(位于目标服务器上)试图从 2 个数据库中提取数据并将数据移动到另一台服务器上的数据库?
  • 没有。要么您不小心从错误的数据库中提取,要么您在查询中没有意识到一些差异。忘记跨数据库是一个问题 - 它不是。跨SERVER可以即可。如果它在 SSMS 中运行,它应该在该源中运行。您可以发布查询吗?请注意,如果不直接向我们提供所有信息,我们必须来回询问它,而且当您花时间发布查询时,您可能会注意到您的问题。最后,我建议您在这两种情况下都使用 SQL Profiler 来捕获查询。再次进行设置时,您可能会注意到这个问题。

标签: sql-server sql-server-2008 ssis


【解决方案1】:

如果您用于连接的登录名具有适当的访问权限,则只要您完全限定表名,您就应该能够使用服务器上的所有数据库。即

select a, b
from bd1.dbo.table1 join
 db2.dbo.table2
  on some_col = some_other_col 

如果这不起作用(它应该,我有一些在 ssis 中运行的查询),您可以在 1 个数据库中创建一个视图,该数据库在两个数据库上都保存查询。同样,连接帐户需要对所有使用的数据库具有适当的权限。

如果您使用的不是选择,则不允许指定 db/schema,您可以使用

use db1
some action

use db2 
some action

【讨论】:

    【解决方案2】:

    如果您在单个服务器上工作并且您拥有数据库的权限,那么使用 oledb 源您可以为多个数据库工作。这2个设置你需要考虑... 1)您需要为所有对象提供一个完全限定的名称。 (db_name.Schema_name.object_name) 2) 连接到 oledb 源时,只需提供服务器名称和服务器凭据,不要提供任何数据库名称。将 oledb 源的数据库名称留空,然后它将适用于服务器上的所有数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-15
      • 1970-01-01
      • 2020-12-04
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      相关资源
      最近更新 更多