【问题标题】:how to compare two values from different databases in one SQL statements如何在一个 SQL 语句中比较来自不同数据库的两个值
【发布时间】:2011-07-11 21:23:00
【问题描述】:

我有一个想法,从两个不同的数据库中调用两个值并在一个语句中对它们进行比较?可能吗? 我正在使用 c# 和 MS-SQL

【问题讨论】:

  • 这不是重复的。他询问的是查询两个不同的数据库,而不是专门询问来自两个不同服务器的查询。对于两个不同的数据库,只需将数据库名称添加到表的前面(换句话说,完全限定它),就像 select * from master.dbo.systables 一样,从另一个服务器查询数据,您需要使用链接服务器。跨度>

标签: c# sql sql-server


【解决方案1】:

是的。

对于 MSSQL,您可以在表前添加数据库名称。你通常有 4 个可以使用的命名空间

[服务器名称].[数据库名称].[所有者].[表名]

因此,如果您想在一个语句中比较两个值,您只需要通过将数据库名称放在表名称前面来跨表连接即可。

如果数据库位于不同的服务器上,那么您需要在运行 SQL 的一侧创建一个链接服务器,以便它知道其他 sql 服务器。您可以在 Management Studio 中添加链接服务器,也可以使用 sp_addlinkedserver 之类的 SQL 来添加链接服务器

【讨论】:

  • 在 sql server 2005 及更高版本中 [owner] 部分已更改为 [schema]
【解决方案2】:

如果您碰巧缺乏创建链接服务器的 SQL Server 权限,您可以创建到每个服务器的连接,并且您的客户端可以使用 Microsoft JET 库附加到服务器,然后您可以执行异构连接客户端.

【讨论】:

    【解决方案3】:

    根据您的设置,这里有几种可能性。如果您的数据库是不同的 SQL Server 安装,那么您需要先查看sp_linkedserver。一旦您能够使用 same login 查看两个数据库,您就可以执行以下查询,其中 db1 和 db2 是数据库,dbo 是所有者,tab1 和 tab2 是各自的表。

    SELECT a.col1 
    FROM db1.dbo.tab1 a, db2.dbo.tab2 b
    WHERE a.col1 = b.col2
    

    【讨论】:

      【解决方案4】:

      您可以进行跨数据库连接来比较这些值:

      SELECT
         db1.Value as value1,
         db2.Value as value2
      FROM
         [database1].dbo.MyTable1 as db1
         INNER JOIN
         [database2].dbo.MyTable as db2
          ON   
          /* insert join clasue */
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-23
        • 1970-01-01
        • 2014-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多