sql >> Databáze >  >> RDS >> Sqlserver

Dotazování dat spojením dvou tabulek ve dvou databázích na různých serverech

Budete muset použít sp_addlinkedserver vytvořit odkaz na server. Informace o použití naleznete v referenční dokumentaci. Jakmile je navázáno spojení se serverem, vytvoříte dotaz jako obvykle, pouze před název databáze přidáte druhý server. I.E:

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

Jakmile je propojení vytvořeno, můžete také použít OPENQUERY provést příkaz SQL na vzdáleném serveru a přenést zpět pouze data. To může být o něco rychlejší a umožní to vzdálenému serveru optimalizovat váš dotaz. Pokud data uložíte do mezipaměti v dočasné (nebo v paměti) tabulce v DB1 ve výše uvedeném příkladu jej budete moci dotazovat stejně jako připojení ke standardní tabulce. Například:

-- 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

Prohlédněte si dokumentaci k OPENQUERY, kde najdete další příklady. Výše uvedený příklad je pěkně vymyšlený. V tomto konkrétním příkladu bych určitě použil první metodu, ale druhou možnost pomocí OPENQUERY můžete ušetřit čas a výkon, pokud použijete dotaz k odfiltrování některých dat.



  1. Azure Virtual Machines pro použití SQL Server

  2. Klauzule OUTPUT v MySQL

  3. Část 2:Klasifikace obrázků pomocí serveru MariaDB a TensorFlow – výukový program

  4. Postgres nepoužívá index, když je mnohem lepší volba index scan