2011-03-09 22 views
3

我有一個想法可以從兩個不同的數據庫中調用兩個值並將它們在一個語句中進行comapre?可能嗎? 我正在使用c#和MS-SQL如何在一個SQL語句中比較來自不同數據庫的兩個值

+0

[從SQL Server中的兩個不同服務器中選擇數據]的可能的重複(http://stackoverflow.com/questions/1144051/selecting-data-from-two-different-servers-in-sql-server) –

+1

This不是重複的。他詢問有關查詢兩個不同的數據庫的問題,而不是專門詢問是否從兩臺不同的服務器進行查詢。對於兩個不同的數據庫,只需將數據庫名稱添加到表格的前面(換句話說就是完全限定它),就像在select * from master.dbo.systables中查詢數據一樣,從另一臺服務器查詢需要使用鏈接服務器的數據。 –

回答

6

是的。

對於MSSQL,您可以將數據庫名稱添加到表格的前面。你通常有4個命名空間,你可以使用

[服務器名稱]。[數據庫名]。[擁有者]。[表名]

所以,如果你想兩個值在一個聲明中比較,你應該只需要通過將數據庫名稱放在表名前面來連接表。

如果數據庫位於不同的服務器上,那麼您將需要創建一個鏈接服務器到將運行您的SQL的一側,以便它知道其他sql服務器。您可以添加使用的東西Management Studio中或通過SQL鏈接服務器一樣sp_addlinkedserver

+3

在sql server 2005及更高版本[所有者]部分已更改爲[架構] –

+0

@Filip De Vos - 好點 – kevchadders

5

你可以做跨數據庫連接比較這些值:

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 */ 
0

有幾個可能性,在這裏根據您的設置。如果您的數據庫是不同的SQL Server安裝,那麼您首先需要查看sp_linkedserver。一旦您有能力使用同一登錄名查看兩個數據庫,則只需執行以下查詢,其中db1和db2是數據庫,dbo是所有者,tab1和tab2是相應的表。

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

您錯過了服務器...... –

0

如果你碰巧缺少SQL Server權限才能創建鏈接的服務器,您可以創建每個服務器的連接和您的客戶端可以連接到使用Microsoft Jet庫服務器,那麼你可以進行異構加入客戶端。

相關問題