RODBC错误:' Calloc'无法分配内存

时间:2017-07-04 09:39:29

标签: sql-server r database azure-sql-database rodbc

我正在设置SQL Azure数据库。我需要每天将数据写入数据库。我在Windows10上使用64位R版本3.3.3。某些列包含文本(超过4000个字符)。最初,我使用Microsoft SQL Server管理工作室将一些数据从csv导入SQL Azure数据库。我将文本列设置为ntext格式,因为当我尝试使用nvarchar时,max是4000并且一些值被截断,即使它们长约1100个字符。

为了附加到数据库,我在预定义varTypes时首先将记录保存在临时表中:

varTypesNewFile <- c("Numeric", rep("NTEXT", ncol(newFileToAppend) - 1)) 
names(varTypesNewFile) <- names(newFileToAppend) 
sqlSave(dbhandle, newFileToAppend, "newFileToAppendTmp", rownames = F, varTypes = varTypesNewFile, safer = F)

然后使用:

附加它们
insert into mainTable select * from newFileToAppendTmp

如果文字不太长,上面的确有效。但是,有时我在sqlSave命令期间收到以下错误:

Error in odbcUpdate(channel, query, mydata, coldata[m, ], test = test,  : 
'Calloc' could not allocate memory (1073741824 of 1 bytes)

我的问题是:

  1. 如何解决此问题?

  2. 这是我应该使用的格式吗?

  3. 此外,即使上述工作,上传约5k的记录大约需要一个小时。是不是太久了?这是正常的时间吗?如果没有,我能做得更好。

1 个答案:

答案 0 :(得分:1)

RODBC很老了,NVARCHAR列可能有点不稳定。请尝试使用RSQLServer包,它提供了另一种连接到SQL Server的方法(并且还提供了dplyr后端)。