2010-04-27 58 views
0
StringBuilder query = new StringBuilder(); 
        query.Append("CREATE TABLE #Codes (Code nvarchar(100) collate database_default) "); 
        query.Append("Insert into #Codes (Code) "); 
        int lengthOfCodesArray = targetCodes.Length; 
        for (int index = 0; index < lengthOfCodesArray; index++) 
        { 
         string targetCode = targetCodes[index]; 
         query.Append("Select N'" + targetCode + "' "); 
         if (index != lengthOfCodesArray - 1) 
         { 
          query.Append("Union All "); 
         } 
        } 
    query.Append("drop table #Codes "); 

時運行此查詢:cmd.ExecuteReader()我得到有足夠的系統內存上創建臨時表

有足夠的系統內存創建臨時表時運行此查詢

But weird thing is that, when I have 25k codes is ok, when 5k I get this error. 

初始大小爲262 MB。

每個代碼的Lengt是平均15

+0

這段代碼應該做什麼? – 2010-04-27 21:50:31

+0

我正在使用此表與其他人一起加入,但我無法顯示此代碼。但是現在我測試了我向你展示過的這個命令文本。 – user278618 2010-04-27 21:55:12

回答

1

這將產生一個巨大的聲明,當然它最終失敗。

您應該一次完成一個INSERT(至少UNION ALL),至少在需要優化之前。

我有一種感覺,你的最終答案會涉及到BULK INSERT,但我不太瞭解你的應用程序。

+0

Pinalkumar戴夫是我的權威,他以其他方式聲稱: http://blog.sqlauthority.com/2009/03/11/sql-server-difference-between-union-vs-union-all-optimal-性能比較/ – user278618 2010-04-27 22:40:08

+0

不允許批量插入 – user278618 2010-04-27 22:41:35

+1

您允許使用XML嗎?您可以將所有代碼作爲XML文檔傳遞到SQL Server,然後使用XML數據類型及其方法將其插入表中。儘管如此,仍然比BULK INSERT效率低得多。 – 2010-04-27 22:50:06

相關問題