2017-02-02 34 views
1

這裏是我的代碼:sqlSave和sqlDrop R中

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) 

我收到錯誤消息:

Error in odbcTableExists(channel, sqtable, abort = errors) :
‘db_name.table_name’: table not found on channel

當我執行行:

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

我收到以下錯誤信息:

Error in sqlSave(db.handle, df_small, tablename = sql_table, safer = FALSE, : 42S01 2714 [Microsoft][SQL Server Native Client 11.0][SQL Server] There is already an object named 'table_name' in the database.

[RODBC] ERROR: Could not SQLExecDirect 'CREATE TABLE db_name.table_name ("State_rename" varchar(255), "CoverageType" varchar(255))'

我連續執行代碼和無法理解這兩個錯誤消息怎麼可能是真的。

回答

2

考慮從sqltable變量中刪除模式,該變量由SQL Server使用,並帶有句號限定符。具體而言,將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) 
+0

謝謝你的建議。現在'sqlDrop'生成錯誤'odbcTableExists(channel,sqtable,abort = errors)中的錯誤: 'table_name':表未在通道中找到,sqlSave生成錯誤'sqlSave中出現錯誤(db.handle,df_small,tablename = sql_table,更安全= FALSE,: 42000 262 [Microsoft] [SQL Server Native Client 11.0] [SQL Server] CREATE TABLE權限在數據庫'master'中被拒絕 [RODBC] ERROR:Could not SQLExecDirect'CREATE TABLE table_name(「State_rename」varchar (255),「CoverageType」varchar(255))'' – user1700890

+0

嗯......真正的* table *名稱是什麼?它可能是[保留字](https://msdn.microsoft.com/en- us/library/ms189822.aspx)。您可以在Management Studio或其他控制檯中確認數據庫表嗎?您可能會遇到DB權限問題。 – Parfait