我正在设置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)
我的问题是:
如何解决此问题?
这是我应该使用的格式吗?
此外,即使上述工作,上传约5k的记录大约需要一个小时。是不是太久了?这是正常的时间吗?如果没有,我能做得更好。
答案 0 :(得分:1)
RODBC很老了,NVARCHAR列可能有点不稳定。请尝试使用RSQLServer包,它提供了另一种连接到SQL Server的方法(并且还提供了dplyr后端)。