1

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

4

2 回答 2

1

如果您创建一个(单一)类型的 DataContext,其中包含两个数据库中对象的表类,那么这在 LINQ to SQL 中是可能的。这个设计器在这里帮不了你,所以你必须手动创建一些表类。换句话说,使用 VS 设计器为您的主数据库创建一个类型化的 DataContext,然后为您希望访问的其他数据库中的表手动添加类:

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

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

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

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

  1. 添加新的 LINQ to SQL 连接。
  2. 选择指定新数据库或现有数据库,然后选择要查询的主数据库。
  3. 单击Include Additional Databases复选框并选择要包含的额外数据库。您还可以在此对话框中从链接服务器中选择数据库。

您现在可以进行跨数据库查询。只要连接将发生在服务器而不是客户端上,这些就得到了适当的优化。

于 2010-06-25T05:41:16.300 回答
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 
于 2010-06-23T14:58:16.453 回答