RODBC Temporary Table Issue when connecting to MS SQL Server

前端 未结 2 594
攒了一身酷
攒了一身酷 2020-12-03 04:57

I am running R on unix and I am using the RODBC package to connect to MS SQL server. I can execute a query that returns results fine with the package, but if I use a tempor

相关标签:
2条回答
  • 2020-12-03 05:28

    The RODBC driver seems to think that when SQL Server returns any count of rows that the entire statement is complete. So you need to set nocount on at the beginning of your statement or stored procedure that is called.

    set nocount on
    

    This allowed me to use a stored procedure that was using temporary table in R.

    0 讨论(0)
  • 2020-12-03 05:41

    The problem appears to be in your SQL syntax, not anything inherent with R or the RODBC package. I'm fairly certain you need to separate your SQL statements with the go command to make sure that the first statement finished executing before the second, and the third, and so on. Alternatively, you could break them up into four different statements as I did below. This works on my machine:

    library(RODBC)
    ch <- odbcConnect("details")
    
    qry1 <- "create table #temptable (test int)"
    qry2 <- "insert into #temptable(test) values(2)"
    qry3 <- "select * from #temptable"
    qry4 <- "drop table #temptable"
    
    sqlQuery(ch, qry1)
    sqlQuery(ch, qry2)
    doesItWork <- sqlQuery(ch, qry3)
    sqlQuery(ch, qry4)
    

    And the output

    > doesItWork
      test
    1    2
    

    EDIT

    Turning all of your queries into a list object and iterating through them could save you some coding in the future. For example:

    queryList <- list(qry1, qry2, qry3, qry4)
    sqlOutput <- lapply(queryList, function(x) sqlQuery(ch, x))
    

    This will generate some extraneous output that you may not care about, but the results you are interested in can be pulled with sqlOutput[[3]] where 3 represents the query of interest.

    0 讨论(0)
提交回复
热议问题