2016-01-22 53 views
1

我希望你能帮助我。更新所有独特记录(比较2个不同表中的字段)

我想通过验证一个表的项目号在另一个表中不存在来更新所有唯一记录。

目前我有下述步骤,但我得到一个错误返回的结果是超过2100:

传入的表格格式的数据流(TDS)远程过程调用(RPC)协议流不正确。此RPC请求中提供的参数太多。最大值是2100.

我已经在这个问题上做了大量的阅读和研究,但我正在努力寻找和实现一个简单的解决方案,将为我的目的工作。请注意:我是新手。

任何想法,我可以重写这个工作?

public static void NewRecords() 
{ 
    using (var stageContext = new StagingTableDataContext()) 
    { 
     using (var destinationContext = new    DestinationTableDataContext()) 
     { 
      var allProjectNames = destinationContext.THEOPTIONs.Select(u => u.NAME).ToList(); 
      var deltaList = stageContext.ProjectMasters.Where(u => !allProjectNames.Contains(u.Finance_Project_Number)).ToList(); 

      deltaList.ForEach(u => u.Processing_Result = 0); 
      deltaList.ForEach(u => u.Processing_Result_Text = "UNIQUE"); 

     } 
     stageContext.SubmitChanges(); 
    } 
} 

预先感谢您!

+0

这可能没有关系,但为什么要嵌套使用两个上下文类?为什么不打开'DestinationTableDataContext',计算'allProjectNames',然后打开'StagingTableDataContext'并更新数据? –

+0

@Yacoub Massad我嵌套使用2个上下文类来简化代码的重用和支持目的。 – onmyway

+0

'allProjectNames'列表的大小是多少? –

回答

1

您会收到错误消息,因为allProjectNames包含的太多记录需要为第二个select语句进行参数化。您可以首先获取整个ProjectMasters表(请参阅下面我的额外添加的ToList),然后查询它。或者实现一个带有表参数的存储过程。

public static void NewRecords() 
     { 
      using (var stageContext = new StagingTableDataContext()) 
      { 
       using (var destinationContext = new DestinationTableDataContext()) 
       { 
        var allProjectNames = destinationContext.THEOPTIONs.Select(u => u.NAME).ToList(); 
        var deltaList = stageContext.ProjectMasters.ToList().Where(u => !allProjectNames.Contains(u.Finance_Project_Number)).ToList(); 

        deltaList.ForEach(u => u.Processing_Result = 0); 
        deltaList.ForEach(u => u.Processing_Result_Text = "UNIQUE"); 

       } 
       stageContext.SubmitChanges(); 
      } 
     } 
+0

谢谢你的回应 - 非常感谢。我不会再犯我的错误,但是,我所有的记录都被更新了,而不仅仅是唯一的记录。也许有问题可能存在的任何想法? – onmyway

+0

@onmyway建议的代码更新ProjectMasters中的行,其中Finance_Project_Number不存在于THEOPTIONs表中。如果所有记录都已更新,那么THEOPTIONs表的结果可能是罪魁祸首。它是空的吗? – lobiZoli

+0

@ lobiZoli我想我明白在我的问题可能在现身 SQL查询我跑做了DISTINCT:。 SELECT DISTINCT [Finance_Project_Number] FROM [InterfaceInfor] [DBO] [ProjectMaster] WHERE NOT EXISTS( SELECT * FROM [IMS]。[dbo]。[THEOPTION] WHERE [InterfaceInfor]。[dbo]。[ProjectMaster]。[Finance_Project_Number] = [IMS]。[dbo]。[THEOPTION]。[NAME]) 该过程并没有做一个独特的...有没有办法,我可以添加一个独特的条款的程序? – onmyway

相关问题