代码之家  ›  专栏  ›  技术社区  ›  Factor Mystic

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

  •  1
  • Factor Mystic  · 技术社区  · 14 年前

    我从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 回复  |  直到 14 年前
        1
  •  1
  •   Joe Albahari    12 年前

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

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

    编辑: 在LINQPad Premium版本中,您现在可以用SQL Server执行跨数据库查询,方法有两种。

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

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

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

    现在可以进行跨数据库查询。只要连接发生在服务器上而不是客户机上,就可以对它们进行适当的优化。

        2
  •  0
  •   Baaju    14 年前

    使用具有完全限定名的链接服务器从当前数据库查询另一个数据库。这应该管用。

    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