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

    Cercando di caricare il dataframe:Perché RODBC non carica un dataframe su SQL Server?

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

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

    creando ..alternatively tavolo e poi aggiungendo ad esso:

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

    Cosa amSto sbagliando?

    +0

    Avete autorizzazioni sufficienti per creare tabelle sul server SQL? – BenBarnes

    +0

    @BenBarnes Sì. – jenswirf

    +0

    Il codice funziona per me. Forse un problema con il database predefinito o lo schema predefinito. Stampa (con) fornisce il database corretto? E puoi aggiungere lo schema con il – Henrico

    risposta

    3

    Se aggiungo parentesi, viene visualizzato anche un errore.

    Se utilizzo una stringa di connessione con il database per accertarmi di essere nel database corretto (non master) ed eseguire la dichiarazione sqlSave(con, df, tablename='dbo.MyTable4', rownames=F) o sqlSave(con, df, tablename='MyTable5', rownames=F), funziona.

    +0

    Sto avendo lo stesso problema.Potresti darmi un esempio della stringa di connessione che hai usato? Per me, mentre odbcConnect() funziona, se inserisco la mia stringa nel formato che hai usato sopra, ottengo il seguente: 'odbcDriverConnect (" Driver = SQL Server; Server = xx; Database = xx; Uid = xx; Pwd = xx ") [RODBC] ERRORE: stato IM003, codice 2069604672, messaggio [iODBC] [Driver Manager] Il driver specificato non può essere caricato' – Bryan

    4

    Per la connessione a un server Microsoft SQL, è necessario utilizzare odbcDriverConnect anziché odbcConnect per eseguire le istruzioni sqlSave ecc. Solo odbcDriverConnect consente di specificare un database specifico nella stringa di connessione.

    0

    RODBC esamina la cartella predefinita per la connessione al server ODBC per verificare se sono presenti autorizzazioni di scrittura (anche se si sta per una sottodirectory). Se non si dispone di autorizzazioni principali, fallisce.

    Ho dovuto creare due connessioni all'interno di R, una per la lettura dal master e l'altra per la scrittura nella directory temporanea. Questi sono stati impostati creando due connessioni server tramite l'amministrazione ODBC del mio computer locale (all'interno di Win7):

    -Uno che per impostazione predefinita è la directory del server master protetto da scrittura e che utilizzo per estrarre i dati di sola lettura.

    -One è il valore predefinito della directory del server su cui sono presenti autorizzazioni di scrittura/rilascio.

    In altre parole, il problema è risolto modificando connessione ODBC della macchina e avere punto R alla nuova connessione al server si farà (quella che il default è il vostro tavolo da scrittura gestite le autorizzazioni.

    Problemi correlati