R 中的 sqlSave 有问题吗?
Issues with sqlSave in R?
我已经通读了之前 questions/answers 关于这个问题的内容,但是 none 似乎回答了我的问题。我的最终目标是从 R 获取数据到 SQL table.
在尝试这样做时,我首先在 Microsoft SQL Server 2012 中创建了 table [PL_DEV].[PL_A].[X]
,其中包含以下列:ST VARCHAR(10)
、YEAR VARCHAR(10)
, Intercept FLOAT
, Y FLOAT
, Z FLOAT
, U FLOAT
。已将主键添加到 ST
、YEAR
列。
从那里,我建立了一个 RODBC 连接,我称之为 conn
。
设置之后,我创建了一个名为 df
的数据框,第一行数据如下所示:
ST YEAR INTERCEPT Y Z U
"01" "2009" -50012.37 0.6341358 16569.52 61.42544
设置后,我尝试将此数据框 (df
) 中的数据插入到我创建的 SQL table ([PL_DEV].[PL_A].[X]
) 中。我试图用以下语句来做到这一点:
sqlSave(conn, dat = df, tablename = "[PL_DEV].[PL_A].[X]", append = TRUE, rownames = FALSE)
我设置 append = TRUE
这样它就不会创建 table 而是插入数据并且还设置 rownames = FALSE
这样它就不会添加 extra/unnecessary 列.
但是,当我执行上面的语句时,出现以下错误:
Error in sqlSave(conn, df, tablename = "[PL_DEV].[PL_A].[X]", :
42S01 2714 [Microsoft][SQL Server Native Client 11.0][SQL Server]
There is already an object named 'X' in the database.
[RODBC] ERROR: Could not SQLExecDirect 'CREATE TABLE [PL_DEV].[PL_A].[X]
("ST" varchar(255), "YEAR" varchar(255), "INTERCEPT" float, "Y" float,
"Z" float, "U" float)'
如果我执行以下命令,我可以将数据插入 SQL table([master].[dbo].[df]
更具体):
sqlSave(conn, dat = df)
但是,一旦数据在此 table 中,就会出现同样的问题,我无法将更多数据插入 table。
有谁知道我做错了什么或其他功能会为我做同样的事情吗?上周我刚开始用 R 编程。任何见解将不胜感激。
找到解决方法。
对于循环的第一次迭代,我使用了以下命令:
sqlSave(conn, dat = df, rownames = FALSE)
对于循环的第 2 次到第 n 次迭代,我使用了以下命令:
sqlSave(conn, dat = df, append = TRUE, rownames = FALSE)
这为我在数据库 [PL_DEV] 中创建了一个 table [dbo].[df](因为我将我的 RODBC 直接设置到该数据库)。
我已经通读了之前 questions/answers 关于这个问题的内容,但是 none 似乎回答了我的问题。我的最终目标是从 R 获取数据到 SQL table.
在尝试这样做时,我首先在 Microsoft SQL Server 2012 中创建了 table [PL_DEV].[PL_A].[X]
,其中包含以下列:ST VARCHAR(10)
、YEAR VARCHAR(10)
, Intercept FLOAT
, Y FLOAT
, Z FLOAT
, U FLOAT
。已将主键添加到 ST
、YEAR
列。
从那里,我建立了一个 RODBC 连接,我称之为 conn
。
设置之后,我创建了一个名为 df
的数据框,第一行数据如下所示:
ST YEAR INTERCEPT Y Z U
"01" "2009" -50012.37 0.6341358 16569.52 61.42544
设置后,我尝试将此数据框 (df
) 中的数据插入到我创建的 SQL table ([PL_DEV].[PL_A].[X]
) 中。我试图用以下语句来做到这一点:
sqlSave(conn, dat = df, tablename = "[PL_DEV].[PL_A].[X]", append = TRUE, rownames = FALSE)
我设置 append = TRUE
这样它就不会创建 table 而是插入数据并且还设置 rownames = FALSE
这样它就不会添加 extra/unnecessary 列.
但是,当我执行上面的语句时,出现以下错误:
Error in sqlSave(conn, df, tablename = "[PL_DEV].[PL_A].[X]", : 42S01 2714 [Microsoft][SQL Server Native Client 11.0][SQL Server] There is already an object named 'X' in the database. [RODBC] ERROR: Could not SQLExecDirect 'CREATE TABLE [PL_DEV].[PL_A].[X]
("ST" varchar(255), "YEAR" varchar(255), "INTERCEPT" float, "Y" float, "Z" float, "U" float)'
如果我执行以下命令,我可以将数据插入 SQL table([master].[dbo].[df]
更具体):
sqlSave(conn, dat = df)
但是,一旦数据在此 table 中,就会出现同样的问题,我无法将更多数据插入 table。
有谁知道我做错了什么或其他功能会为我做同样的事情吗?上周我刚开始用 R 编程。任何见解将不胜感激。
找到解决方法。
对于循环的第一次迭代,我使用了以下命令:
sqlSave(conn, dat = df, rownames = FALSE)
对于循环的第 2 次到第 n 次迭代,我使用了以下命令:
sqlSave(conn, dat = df, append = TRUE, rownames = FALSE)
这为我在数据库 [PL_DEV] 中创建了一个 table [dbo].[df](因为我将我的 RODBC 直接设置到该数据库)。