将大数据集从R保存到临时表SQL数据库中
我有一个数据帧(将大数据集从R保存到临时表SQL数据库中,sql,sql-server,r,Sql,Sql Server,R,我有一个数据帧(predict\u prc),有60k行和2个变量(chrt\u id和prc)。我需要将这个数据帧保存到MS SQL数据库中 我选择下一种方法-创建临时表,插入新值并执行存储的进程 我尝试了下面的代码: sql = paste(" CREATE TABLE #t (chrt_id INT PRIMARY KEY,prc FLOAT) INSERT INTO #t VALUES",
predict\u prc
),有60k行和2个变量(chrt\u id
和prc
)。我需要将这个数据帧保存到MS SQL数据库中
我选择下一种方法-创建临时表,插入新值并执行存储的进程
我尝试了下面的代码:
sql = paste("
CREATE TABLE #t (chrt_id INT PRIMARY KEY,prc FLOAT)
INSERT INTO #t
VALUES",
paste0(sprintf("(%.2i, ", predict_prc$chrt_id), sprintf("%.2f)", predict_prc$predict_prc), collapse = ", ")
,"EXEC DM.LoadChrtPrc
")
但这样插入的值太多了
然后我尝试了下一个代码:
sql_create = paste("
IF (SELECT object_id('#t')) IS NOT NULL
BEGIN
DROP TABLE #t
END
CREATE TABLE #t (chrt_id FLOAT PRIMARY KEY, prc FLOAT)
")
sql_exec = paste("
EXEC DM.LoadChrtPrc
")
channel <- odbcConnect('db.w')
create <- sqlQuery(channel, sql_create)
save <- sqlSave(channel, predict_prc, tablename = '#t', fast=TRUE, append=F, rownames=FALSE)
output <- sqlQuery(channel, sql_exec)
odbcClose(channel)
有人能帮我解决这个问题吗?SQL Server不允许一次查询超过1000行。 您可以通过创建1000个块来插入所有值。
对于每1000行,您应该创建一个新的sql查询并运行它。要解决这个问题,我必须创建几个临时表,然后每个表插入1000条记录以解决问题。
所以,在创建临时表之前,先计算要放入临时表的记录数,除以1000,然后根据需要创建临时表 此解决方案为一次性查询解决方案。
如果你想自动化这个过程,可以使用其他方法 为了让这个答案与2017年的答案有点不同,你能放一些有用的代码吗?
> save <- sqlSave(channel, predict_prc, tablename = '#t', fast=TRUE, append=F, rownames=FALSE)
Error in sqlSave(channel, predict_prc, tablename = "#t", fast = TRUE, :
42S01 2714 [Microsoft][ODBC SQL Server Driver][SQL Server]There is already an object named '#t' in the database.
[RODBC] ERROR: Could not SQLExecDirect 'CREATE TABLE "#t" ("chrt_id" float, "prc" float)'
> save <- sqlSave(channel, predict_prc, tablename = '#t1', fast=TRUE, append=F, rownames=FALSE)
Error in sqlColumns(channel, tablename) :
‘#t’: table not found on channel