【问题标题】:Query against two tables in separate databases on the same server查询同一服务器上不同数据库中的两个表
【发布时间】:2011-08-04 15:39:31
【问题描述】:

我需要在同一个SQL Server 上查询两个不同数据库中的两个表。在一张桌子上,我需要获取所有行(简单选择),而在另一张桌子上,选择但 id 与存储过程中的参数匹配。

我尝试这样做但得到错误

无法绑定多部分标识符。

我该怎么办?

查询:

  SELECT QUALITY_CENTER, POSTCODE_ID, (SELECT   [QCID]   
  FROM [Website_Interactive].[dbo].[IIPCentre_UserObject]
  WHere LoginID = @loginID)
  FROM IIP_QC_LIST

【问题讨论】:

  • 我的钱会花在缺少完全限定对象名称的架构部分上,例如 MyDB.dbo.MyTable。
  • 为了清楚起见,您没有从您发布的查询中遗漏任何内容吗?因为如果您尝试在子查询之外使用 QCID 执行 ORDER BY 或其他操作,您会收到该错误。

标签: sql sql-server tsql


【解决方案1】:

听起来你打错了什么。您可以使用以下方法查询另一个数据库中的表:

SELECT tn.ID, tn.NAME
FROM [Database Name].[Schema].[TableName] as tn

我特意添加了一个由两个单词组成的数据库名称,因为您必须在其周围加上方括号才能识别它。您的架构很可能是dbo

如果您向我们展示您的查询并提供数据库名称,我可以提供更完整的答案。

更新:

您确定“中心”的拼写正确吗?我注意到您在IIPCentre_UserObject 中将其拼写为“中心”,我认为这可能适合英国(?),但您在QUALITY_CENTER 中将其拼为“中心”。我会假设它在您的环境中以一种或另一种方式拼写。

【讨论】:

  • 如果当前用户没有此表的权限,是否可以将用户凭据添加到此查询?
  • 方括号很重要,即使数据库名称是一个单词。如果没有它们,您可能会收到 Invalid object name 错误。
【解决方案2】:

您可以通过向 SQL 对象(在本例中为您的 SQL 表)提供 FQN(完全限定名称)来轻松做到这一点。表的 FQN 语法如下:

[database-name].[schema-name].[table-name]

例子:

SELECT a, b, c FROM Database1.Schema1.Table1
UNION 
SELECT a, b, c FROM Database2.Schema2.Table2

Database1 是您的第一个数据库,Database2 是您的第二个。

【讨论】:

    【解决方案3】:

    可以/直接从同一服务器上的不同数据库中进行选择。您需要使用完全限定名称,即

    SELECT * from database.schema.table 
    

    例如

    SELECT * FROM northwind.dbo.orders where id = @id
    

    【讨论】:

    • 有可能的东西可能仍然非常昂贵。连接来自不同数据库但仍在同一数据库服务器上的两个表时是否会产生额外费用?如果涉及不同的服务器(不假设网络成本),数据库是否提供算法来或多或少地有效地完成它?到目前为止的答案对于一个 10k+ 的魔术师来说有点短 8-(
    • @PatrickFromberg 很抱歉让您失望,尽管您希望获得的信息远远超出了原始问题的范围(在回答后编辑之前)。您的问题是一个很好的问题,可能值得拥有自己的帖子。简短的回答,在 MS SQL Server 中,同一服务器上不同数据库中的两个表之间的连接在很大程度上等同于同一数据库中的两个表。尽管 SQL Server 仍在尝试尽可能优化,但链接服务器查询的成本可能相当高,但它不可避免地需要通过网络发送潜在的大量数据来执行连接。
    【解决方案4】:

    如果一个数据库中的表与另一个表的值相同,您可以查询两个单独的数据库

    像这些:

    SELECT * FROM DB1.dbo.MyTable db1,DB2.dbo.MyTable db2 where db1.table1=db2.table1
    

    【讨论】:

      猜你喜欢
      • 2021-01-29
      • 1970-01-01
      • 2021-10-26
      • 2011-07-05
      • 2017-11-18
      • 2014-01-03
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多