我开始使用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中是否可行?)
答案 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)。您查询的数据库必须位于同一服务器上。
第二种方法是在连接属性对话框中列出要查询的额外数据库。此对话框还允许您从链接服务器中选择数据库。以下是如何继续:
Include Additional Databases
复选框,然后选择要包含的额外数据库。您还可以在此对话框中从链接服务器中选择数据库。您现在可以执行跨数据库查询。只要在服务器而不是客户端上进行连接,这些都会得到适当的优化。
答案 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