2013-01-16 29 views
5
library(RODBC) 
con <- odbcDriverConnect("driver=SQL Server; server=name") 
df <- data.frame(a=1:10, b=10:1, c=11:20) 

嘗試上傳的數據幀:爲什麼RODBC不能將數據框上傳到SQL Server?

sqlSave(con, df, tablename='[MyDatabase].[MySchema].[MyTable]', rownames=F) 

>Error in sqlColumns(channel, tablename) : ‘MyDatabase.MySchema.MyTable’: table not found on channel

..alternatively首先創建表,然後追加到它:

cmd <- "create table [MyDatabase].[MySchema].[MyTable] ([a] int, [b] int, [c] int)" 
sqlQuery(con, cmd) 

sqlSave(con, df, tablename='[MyDatabase].[MySchema].[MyTable]', rownames=F, append=T) 

>Error in sqlSave(con, df, tablename = "MyTable", rownames = F, : 42S01 2714 [Microsoft][ODBC SQL Server Driver][SQL Server]There is already an object named MyDatabase.MySchema.MyTable in the database. [RODBC] ERROR: Could not SQLExecDirect 'CREATE TABLE MyDatabase.MySchema.MyTable ("a" int, "b" int, "c" int)'

上午什麼我做錯了?

+0

你有足夠的權限來解決在SQL服務器上創建表? – BenBarnes

+0

@BenBarnes是的。 – jenswirf

+0

代碼適用於我。可能是默認數據庫或默認模式的問題。print(con)是否提供正確的數據庫?您可以添加模式表格名稱 – Henrico

回答

3

如果我添加括號,我也會得到一個錯誤。

如果我使用連接字符串與數據庫,以確保我在正確的數據庫(不是主),並執行語句sqlSave(con, df, tablename='dbo.MyTable4', rownames=F)sqlSave(con, df, tablename='MyTable5', rownames=F)它的作品。

+0

我有同樣的問題。你能給我一個你使用的連接字符串的例子嗎?對於我來說,雖然odbcConnect()工作,如果我把我的字符串以上面使用的格式,我得到以下內容:'odbcDriverConnect(「Driver = SQL Server; Server = xx; Database = xx; Uid = xx; Pwd = xx 「)[RODBC]錯誤:狀態IM003,代碼2069604672,消息[iODBC] [驅動程序管理器]指定的驅動程序無法加載' – Bryan

4

連接到Microsoft SQL Server時,爲了執行sqlSave語句等,使用odbcDriverConnect而不是odbcConnect是很重要的。只有odbcDriverConnect允許在連接字符串中指定特定的數據庫。

0

RODBC查看默認文件夾的ODBC服務器連接,看看你是否有寫權限(即使你要去一個子目錄)。如果您沒有主權限,則失敗。

我不得不在R內創建兩個連接,一個用於讀取主機,另一個用於寫入我的臨時目錄。 這些被創建使用我的本地計算機的ODBC管理(內Win7的)兩大服務器連接設置:

-One默認爲寫保護的主服務器目錄中,並且我用它來拉只讀數據。

- 一個默認爲我有寫入/刪除權限的服務器目錄。

換句話說,你的問題是通過改變機器的ODBC連接,並具有R點到新的服務器連接,您將(在一個默認爲您的寫權限的情況表。

相關問題