2010-06-23 60 views
1

我開始與Linq To SQL,擺弄Linqpad,我試圖複製一個SQL腳本,它連接到同一臺服務器(SQL Server 2008)上不同數據庫中的表。如何在Linqpad中使用兩個不同的Linq to SQL數據庫?

的TSQL查詢看起來大約是這樣的:

using MainDatabase 
go 

insert Event_Type(code, description) 

select distinct t1.code_id, t2.desc 

from OtherDatabase..codes t1 
    left join OtherDatabase..lookup t2 on t1.key_id = t2.key_id and t2.category = 'Action 7' 

where t2.desc is not null 

基本上,我試圖找出如何做一個跨數據庫插入。這可能與Linq To SQL(Linqpad中可能嗎?)

回答

0

使用具有完全限定名稱的鏈接服務器從當前數據庫中查詢另一個數據庫。這應該工作。

using MainDatabase 
go 

insert Event_Type(code, description) 

select distinct t1.code_id, t2.desc 

from <Linked_Server>.OtherDatabase..codes t1 
    left join <Linked_Server>.OtherDatabase..lookup t2 on t1.key_id = t2.key_id and t2.category = 'Action 7' 

where t2.desc is not null 
+0

我不明白。這些數據庫位於同一臺服務器上。 – 2010-06-23 15:08:47

+0

哦,我的壞!是的,這也是可笑的工作! – Baaju 2010-06-23 15:24:16

+1

這是SQL語法,但是,如何在Linq中完成這個問題... – 2010-06-23 18:48:31

1

如果您創建包含兩個數據庫中的對象的表類的(單一)類型的DataContext,那麼在LINQ to SQL中這是可能的。這個設計器在這裏不會幫你,所以你必須手動創建一些表類。換句話說,使用VS設計人員創建一個類型的DataContext爲您的主數據庫,然後手動添加類中的其他數據庫,你要訪問的表:

[Table (Name = "OtherDatabase.dbo.lookup")] 
public class Lookup 
{ 
    ... 
} 

編輯:在LINQPad高級版,您現在可以用兩種方法之一與SQL Server進行跨數據庫查詢。

最簡單的是拖放方法:在將其他數據庫從Schema Explorer拖到查詢編輯器的同時按住Ctrl鍵。要訪問查詢中的其他數據庫,請使用database.table記法,例如Northwind.Regions.Take(100)。您查詢的數據庫必須位於同一臺服務器上。

第二種方法是在連接屬性對話框中列出要查詢的額外數據庫。該對話框還允許您從鏈接服務器中選擇數據庫。以下是如何繼續:

  1. 添加一個新的LINQ to SQL連接。
  2. 選擇指定新建或現有數據庫,然後選擇要查詢的主數據庫。
  3. 單擊Include Additional Databases複選框並選擇要包含的額外數據庫。您也可以在此對話框中選擇鏈接服務器中的數據庫。

您現在可以執行跨數據庫查詢。只要在服務器上而不是在客戶端上進行連接,就可以對其進行適當的優化。

+0

所以我需要創建一個包含每個表的DataContext類的單個程序集。該程序集將爲我需要訪問的每個數據庫提供這些DataContext類。生成此程序集的過程必須手動完成。啊。什麼時候數據庫具有相同名稱的表? – 2010-06-25 17:14:06

+0

否 - 程序集應包含一個包含您希望從兩個數據庫訪問的表的SINGLE DataContext。如果存在名稱衝突,請爲其中一個表名添加一個不同的名稱 - 只要您正確應用了表格屬性即可。 – 2010-06-26 02:09:39

+1

此答案現在已過時:http:// stackoverflow。com/a/4928921/456188 – Crisfole 2012-06-20 14:47:33

相關問題