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

尝试上传数据框:

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

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

..或者先创建表,然后附加到它:

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)'

我究竟做错了什么?

4

3 回答 3

5

如果我添加括号,我也会收到错误消息。

如果我使用与数据库的连接字符串来确保我在正确的数据库(不是主数据库)中并执行该语句sqlSave(con, df, tablename='dbo.MyTable4', rownames=F)或者sqlSave(con, df, tablename='MyTable5', rownames=F)它可以工作。

于 2013-01-20T11:21:57.053 回答
5

连接到 Microsoft SQL Server 时,必须使用 odbcDriverConnect 而不是 odbcConnect 来执行sqlSave语句等。只有 odbcDriverConnect 允许在连接字符串中指定特定的数据库。

于 2013-02-13T16:47:15.730 回答
0

RODBC 会查看 ODBC 服务器连接的默认文件夹,以查看您是否在此处具有写入权限(即使您要访问子目录)。如果您没有主权限,那么它会失败。

我必须在 R 中创建两个连接,一个用于从 master 读取,一个用于写入我的临时目录。这些是通过使用我本地计算机的 ODBC 管理(在 Win7 中)创建两个服务器连接来设置的:

-默认为写保护的主服务器目录,我用来提取只读数据。

-默认为我具有写入/删除权限的服务器目录。

换句话说,您的问题可以通过更改机器的 ODBC 连接并让 R 指向您将建立的新服务器连接(默认为您的写许可表的连接)来解决。

于 2015-06-04T15:35:25.187 回答