在不同服务器上的两个不同数据库中有两个表,我需要将它们连接起来,以便进行少量查询.我有什么 Select ?我该怎么办?

推荐答案

您需要使用sp_addlinkedserver来创建服务器链接.有关用法,请参见reference documentation.一旦建立了服务器链接,就可以正常构造查询,只需在数据库名称前面加上另一台服务器.即:

-- FROM DB1
SELECT *
FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1
    INNER JOIN [DB2].[MyDatabaseOnDB2].[dbo].[MyOtherTable] tab2
        ON tab1.ID = tab2.ID

建立链接后,还可以使用OPENQUERY在远程服务器上执行SQL语句,并仅将数据传输回您.这可以更快一点,并让远程服务器优化您的查询.如果在上面的示例中,将数据缓存在DB1上的临时(或内存)表中,则可以像加入标准表一样对其进行查询.例如:

-- Fetch data from the other database server
SELECT *
INTO #myTempTable
FROM OPENQUERY([DB2], 'SELECT * FROM [MyDatabaseOnDB2].[dbo].[MyOtherTable]')

-- Now I can join my temp table to see the data
SELECT * FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1
    INNER JOIN #myTempTable tab2 ON tab1.ID = tab2.ID

查看documentation for OPENQUERY个,查看更多示例.上面的例子很做作.在这个具体的例子中,我肯定会使用第一种方法,但是如果使用查询过滤掉一些数据,使用OPENQUERY的第二种方法可以节省一些时间和性能.

Sql相关问答推荐

如何将varchar传递给tvf并使用该参数来查询结果SQL服务器

获取家谱树中第一次出现的特定信息,然后停止

LAG函数通过丢弃空值返回前一行

最近3个月收到的邮箱总数

导出部分条形码字符串GS1-128

IF NOT EXISTS子查询的性能瓶颈

仅在日期相隔时递增(Oracle SQL)

按二维数组的第一个元素排序

聚合内部的条件在哪里?

我需要在 ASP.NET C# 中获取 2 个 SQL 查询结果的平均值

如何根据 Google BigQuery 中的特定列值连接一列的 N 行?

Postgresql 具有相似行为和模式行为的问题

JSON对象查询SQL服务器

SQL 多个不满足的条件失败

SQL的左连接在多对多关系情况下使用

自动生成计算频率的列

使用SQL中另一个表的查询结果在表中查找记录

存储过程 - 动态 SQL 中不同列值的计数

如何通过子 Select 在一次更新(并行数组)中多次更新相同的行

CURRENT_ROW 窗口框架上的 SQL 滞后