복붙노트

[SQL] MS SQL Server에 RODBC 임시 테이블 문제를 연결할 때

SQL

MS SQL Server에 RODBC 임시 테이블 문제를 연결할 때

나는 유닉스에서 R을 실행하고 나는 MS SQL 서버에 연결하는 RODBC 패키지를 사용하고 있습니다. 나는 패키지와 함께 그 결과를 반환 벌금 쿼리를 실행할 수 있습니다,하지만 난 내 SQL 쿼리에서 임시 테이블 어딘가에을 사용하는 경우, 빈 문자열은 나에게 반환됩니다. 웹을 통해보고 후, 나는 문제가 RODBC 패키지 (MS SQL가 아닌) 일반 사용자가 표준 SQL에 기록 된 가정 쓰여졌다 것 같아요. 내가 예를 들어 아래의 코드를 제공하고 있습니다.

나는 RJDBC 패키지를 사용하면 흥미롭게도, 임시 테이블 문제는 존재하지 않습니다. 그러나, RJDBC 패키지는 천천히 고통스럽게도 80,000 행 (10 열) 오기로하고 그 옵션 중 하나되지 않도록 자주 밖으로 실속 것입니다. 다른 사람이 문제로 실행 했습니까? 내가 생각하지 않은 것을 대체 솔루션이 있다면, 난 그들을 듣고 싶네요.

아마도 이것이 R-버그, 나는이 문제에 유일한 아니다 보인다? http://r.789695.n4.nabble.com/RODBC-results-from-stored-procedure-td897462.html

감사

여기서, R의 예이다 :

library(RODBC)
ch <- odbcConnect(insert your server info here)
qry4 <- "create table #tempTable(
    Test int
)
insert into #tempTable
select 2

select * from #tempTable
drop table #tempTable
"
df4 <- sqlQuery(ch, qry4)

해결법

  1. ==============================

    1.RODBC 드라이버는 SQL 서버 행의 수를 반환 할 때 전체 문이 완료되었음을 생각하는 것 같다. 당신은 호출하여 문이나 저장 프로 시저의 시작 부분에 설정 NOCOUNT 할 필요가 그래서.

    RODBC 드라이버는 SQL 서버 행의 수를 반환 할 때 전체 문이 완료되었음을 생각하는 것 같다. 당신은 호출하여 문이나 저장 프로 시저의 시작 부분에 설정 NOCOUNT 할 필요가 그래서.

    set nocount on
    

    이 날 R.에서 임시 테이블을 사용 된 저장 프로 시저를 사용할 수

  2. ==============================

    2.문제는 당신의 SQL 구문, R 또는 RODBC 패키지 고유하지 아무것도 것으로 보인다. 난 당신이 첫 번째 문은 두 번째 전에 실행, 세 번째, 등등 완료되었는지 확인하기 위해 이동 명령을 사용하여 SQL 문을 분리 할 필요가 상당히 확실 해요. 나는 아래처럼 다른 방법으로는 네 가지 문으로 그들을 깰 수 있습니다. 이것은 내 컴퓨터에서 작동합니다 :

    문제는 당신의 SQL 구문, R 또는 RODBC 패키지 고유하지 아무것도 것으로 보인다. 난 당신이 첫 번째 문은 두 번째 전에 실행, 세 번째, 등등 완료되었는지 확인하기 위해 이동 명령을 사용하여 SQL 문을 분리 할 필요가 상당히 확실 해요. 나는 아래처럼 다른 방법으로는 네 가지 문으로 그들을 깰 수 있습니다. 이것은 내 컴퓨터에서 작동합니다 :

    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)
    

    그리고 출력

    > doesItWork
      test
    1    2
    

    편집하다

    목록 개체로 쿼리의 모든 켜기 및 그들이 당신에게 미래에 코딩 일부를 절약 할 수있다를 반복. 예를 들면 :

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

    이것은 당신이 걱정하지 않을 수 일부 외부 출력을 생성하지만, 결과는 당신이 관심있는가하는 SQLOutput으로 당겨 할 수 있습니다 [[3]] (3)는 관심의 쿼리를 나타냅니다.

  3. from https://stackoverflow.com/questions/4747768/rodbc-temporary-table-issue-when-connecting-to-ms-sql-server by cc-by-sa and MIT license