Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将大数据集从R保存到临时表SQL数据库中_Sql_Sql Server_R - Fatal编程技术网

将大数据集从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