如何在Linqpad中使用两个不同的Linq to SQL数据库?

时间:2010-06-23 14:55:36

标签: sql-server linq linq-to-sql tsql linqpad

我开始使用Linq To SQL,摆弄Linqpad,我正在尝试复制一个SQL脚本,该脚本连接到同一服务器(SQL Server 2008)上不同数据库中的表。

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中是否可行?)

2 个答案:

答案 0 :(得分:1)

如果您创建一个(单个)类型的DataContext,它包含两个数据库中对象的表类,则可以在LINQ to SQL中使用。此设计器在这里不会帮助您,因此您必须手动创建一些表类。换句话说,使用VS设计器为主数据库创建类型化的DataContext,然后手动为要访问的其他数据库中的表添加类:

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

编辑:在LINQPad Premium版中,您现在可以通过两种方式之一使用SQL Server进行跨数据库查询。

最简单的是拖放方法:按住Ctrl键,同时将其他数据库从Schema Explorer拖到查询编辑器。要访问查询中的其他数据库,请使用database.table表示法,例如Northwind.Regions.Take(100)。您查询的数据库必须位于同一服务器上。

第二种方法是在连接属性对话框中列出要查询的额外数据库。此对话框还允许您从链接服务器中选择数据库。以下是如何继续:

  1. 添加新的LINQ to SQL连接。
  2. 选择“指定新数据库”或“现有数据库”,然后选择要查询的主数据库。
  3. 单击Include Additional Databases复选框,然后选择要包含的额外数据库。您还可以在此对话框中从链接服务器中选择数据库。
  4. 您现在可以执行跨数据库查询。只要在服务器而不是客户端上进行连接,这些都会得到适当的优化。

答案 1 :(得分: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