1

私はLinq To SQLから始めて、Linqpadをいじっていて、同じサーバー(SQL Server 2008)上の別々のデータベースのテーブルに結合する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で可能ですか?)

4

2 に答える 2

1

これは、両方のデータベースのオブジェクトのテーブル クラスを含む (単一の) 型指定された DataContext を作成する場合、LINQ to SQL で可能です。このデザイナーはここでは役に立たないので、いくつかのテーブル クラスを手動で作成する必要があります。つまり、VS デザイナーを使用してプライマリ データベースの型指定された DataContext を作成し、アクセスする他のデータベースのテーブルのクラスを手動で追加します。

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

編集: LINQPad Premium エディションでは、SQL Server を使用してクロスデータベース クエリを実行できるようになりました - 2 つの方法のいずれかです。

最も簡単なのはドラッグ アンド ドロップ アプローチです。Ctrlキーを押したまま、追加のデータベースをスキーマ エクスプローラーからクエリ エディターにドラッグします。クエリで追加のデータベースにアクセスするには、Northwind.Regions.Take(100) などの database.table 表記を使用します。クエリを実行するデータベースは、同じサーバー上に存在する必要があります。

2 番目の方法は、接続プロパティ ダイアログで照会する追加のデータベースを一覧表示することです。このダイアログでは、リンク サーバーからデータベースを選択することもできます。続行する方法は次のとおりです。

  1. 新しい LINQ to SQL 接続を追加します。
  2. [新規または既存のデータベースを指定] を選択し、クエリを実行するプライマリ データベースを選択します。
  3. チェックボックスをクリックして、Include Additional Databases含めたい追加のデータベースを選択します。このダイアログで、リンク サーバーからデータベースを選択することもできます。

クロスデータベース クエリを実行できるようになりました。クライアントではなくサーバーで結合が発生する限り、これらは適切に最適化されます。

于 2010-06-25T05:41:16.300 に答える
0

完全修飾名を持つリンク サーバーを使用して、現在の DB から別のデータベースにクエリを実行します。それはうまくいくはずです。

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 
于 2010-06-23T14:58:16.453 に答える