问题
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 ");
on: cmd.ExecuteReader() I get
There is insufficient system memory to run this query when creating temporary table
But weird thing is that, when I have 25k codes is ok, when 5k I get this error.
Initial size is 262 MB.
Lengt of each code is average 15.
回答1:
This produces one giant statement, and of course it fails eventually.
You should do your INSERT
one at a time (no UNION ALL
), at least until it's time to optimize.
I have a feeling that your ultimate answer is going to involve BULK INSERT
, but I don't know enough about your application to be sure.
来源:https://stackoverflow.com/questions/2725353/there-is-insufficient-system-memory-to-run-this-query-when-creating-temporary-ta