R中的sqlSave和sqlDrop

时间:2017-02-02 01:26:50

标签: sql sql-server r rodbc

这是我的代码:

library('RODBC')
db.handle <- odbcDriverConnect('driver={SQL Server Native Client 11.0};server=server_name;database = db_name;trusted_connection=yes')
sql_table <- 'db_name.table_name'
sqlDrop(db.handle, sql_table, errors = TRUE)
sqlSave(db.handle,df_small,tablename = sql_table,safer=FALSE,append=TRUE,
        rownames = FALSE)
close(db.handle)

当我执行line:

sqlDrop(db.handle, sql_table, errors = TRUE)

我收到错误消息:

  

odbcTableExists中的错误(channel,sqtable,abort = errors):
  'db_name.table_name':在通道上找不到表

当我执行line:

sqlSave(db.handle,df_small,tablename = sql_table,safer=FALSE,append=TRUE,
            rownames = FALSE)

我收到以下错误消息:

  

sqlSave中的错误(db.handle,df_small,tablename = sql_table,safer =   FALSE,:42S01 2714 [Microsoft] [SQL Server Native Client 11.0] [SQL   服务器]   数据库中已存在名为“table_name”的对象。

     

[RODBC]错误:无法SQLExecDirect'创建表   db_name.table_name(“State_rename”varchar(255),“CoverageType”   VARCHAR(255))'

我连续执行代码,无法理解这两个错误消息是如何成真的。

1 个答案:

答案 0 :(得分:2)

考虑从SQL Server与句点限定符一起使用的 sqltable 变量中删除模式。具体而言,将db_name.table_name更改为table_name。您不需要此架构的原因是您的连接句柄已指定数据库。使用此连接,您无法访问指定服务器中的其他数据库模式。

library('RODBC')

db.handle <- odbcDriverConnect(paste0('driver={SQL Server Native Client 11.0};',
                               'server=server_name;database=db_name;trusted_connection=yes'))

sql_table <- 'table_name'
sqlDrop(db.handle, sql_table, errors = TRUE)
sqlSave(db.handle, df_small, tablename = sql_table, safer = FALSE,
        append = TRUE, rownames = FALSE)
close(db.handle)

顺便说一下,你可以简单地使用append=FALSE来覆盖表格(首先删除它然后重新创建它),而不需要调用sqlDrop

sqlSave(db.handle, df_small, tablename = sql_table, safer = FALSE,
        append = FALSE, rownames = FALSE)