2016-01-22 91 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

相關問題