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に接続する場合、ステートメントなどを実行するには、odbcConnectの代わりにodbcDriverConnectを使用することが不可欠sqlSaveです。接続文字列で特定のデータベースを指定できるのはodbcDriverConnectのみです。

于 2013-02-13T16:47:15.730 に答える
0

RODBCは、ODBCサーバー接続のデフォルトフォルダーを調べて、そこに書き込み権限があるかどうかを確認します(サブディレクトリを使用する場合でも)。マスター権限がない場合は失敗します。

R内に2つの接続を作成する必要がありました。1つはマスターからの読み取り用で、もう1つは一時ディレクトリへの書き込み用です。これらは、ローカルコンピューターのODBC管理(Win7内)を使用して2つのサーバー接続を作成することによって設定されました。

-デフォルトで書き込み保護されたマスターサーバーディレクトリになり、読み取り専用データをプルするために使用するもの。

-書き込み/ドロップ権限を持つサーバーディレクトリがデフォルトになっているもの。

つまり、マシンのODBC接続を変更し、Rが作成する新しいサーバー接続(デフォルトで書き込み許可テーブルに設定される接続)を指すようにすることで、問題が解決されます。

于 2015-06-04T15:35:25.187 に答える