【问题标题】:sqlSave and sqlDrop in RR中的sqlSave和sqlDrop
【发布时间】:2017-06-18 23:17:06
【问题描述】:

这是我的代码:

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)

当我执行行时:

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

我收到错误消息:

odbcTableExists 中的错误(通道、sqtable、中止 = 错误):
‘db_name.table_name’: 在频道上找不到表

当我执行行时:

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

我收到以下错误消息:

sqlSave 中的错误(db.handle,df_small,tablename = sql_table,更安全 = 错误,:42S01 2714 [Microsoft][SQL Server Native Client 11.0][SQL 服务器] 数据库中已经有一个名为“table_name”的对象。

[RODBC] 错误:无法 SQLExecDirect 'CREATE TABLE db_name.table_name ("State_rename" varchar(255), "CoverageType" varchar(255))'

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

【问题讨论】:

    标签: sql sql-server r rodbc


    【解决方案1】:

    考虑从 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)
    

    【讨论】:

    • 感谢您的建议。现在sqlDrop 生成错误Error in odbcTableExists(channel, sqtable, abort = errors) : ‘table_name’: table not found on channel 和sqlSave 生成​​错误Error in sqlSave(db.handle, df_small, tablename = sql_table, safer = FALSE, : 42000 262 [Microsoft][SQL Server Native Client 11.0][SQL Server]CREATE TABLE permission denied in database 'master'. [RODBC] ERROR: Could not SQLExecDirect 'CREATE TABLE table_name ("State_rename" varchar(255), "CoverageType" varchar(255))'
    • 嗯……table的真名是什么?可能是reserved word。您可以在 Management Studio 或其他控制台中确认数据库表吗?你可能有数据库权限问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多