2013-04-16 2 views
2

pyodbc를 사용하여 Microsoft SQL Server에서 데이터를 검색하고 있습니다. 쿼리는 저장 프로 시저의 형식은 Warning: Null value is eliminated by an aggregate or other SET operation.의 경고가 NULLs을 발행되도록 포함하는 값을 통해 일부 집계를 수행하는 다음과 같은 형태pyodbc 및 MS SQL Server - "결과가 없습니다. 이전 SQL은 쿼리가 아닙니다."

SET NOCOUNT ON --Ignore count statements 

CREATE TABLE mytable (...) 

EXEC some_stored_procedure 
INSERT mytable 

--Perform some processing... 

SELECT * 
FROM mytable 

이다. 이로 인해 pyodbc에서 오류 메시지가있는 데이터를 검색하지 못합니다. No results. Previous SQL was not a query.

SET ANSI_WARNINGS OFF을 설정하여 경고를 비활성화하려고했습니다. 그러나 쿼리는 다음 오류 메시지 Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options to be set for the connection. This ensures consistent query semantics. Enable these options and then reissue your query.과 함께 실패합니다.

그것은 경고
  • 비활성화하거나 경고를 무시 pyodbc이

    • 할 수 있습니까?

    저장 프로 시저를 변경할 수있는 권한이 없습니다.

    +0

    진술 사이에 세미콜론이 필요하지 않습니까? ';'? 나는 진심으로 묻고있다. 나는 모른다. –

    +0

    @JoeFrambach : 아니요, 세미콜론은 필요하지 않습니다. –

    답변

    2

    스토어를 임시 테이블에서 쿼리의 결과와 두 개의 쿼리로 문을 실행할 :

    with pyodbc.connect(connection_string) as connection: 
        connection.execute(query1)   #Do the work 
        result = connection.execute(query2) #Select the data 
        data = result.fetchall()    #Retrieve the data 
    

    첫 번째 쿼리가 무거운를 수행하고 양식

    --Do some work and execute complicated queries that issue warning messages 
    
    --Store the results in a temporary table 
    SELECT some, column, names 
    INTO #datastore 
    FROM some_table 
    

    두 번째입니다 쿼리는 데이터를 검색하고 형식을 취합니다.

    SELECT * FROM #datastore 
    

    따라서 모든 경고 메시지는 다음과 같습니다. 첫 번째 쿼리의 실행시 발행됩니다. 두 번째 쿼리를 실행하는 동안 데이터 검색을 방해하지 않습니다.

    +0

    두 번째 쿼리는 연결이 삭제되지 않은 경우 해당 테이블이 무엇인지 알지 못하기 때문에 Till의 위 응답은 작동하지 않습니다. 그러나 전역 임시 테이블을 사용하면 작동합니다. 예 : ## datastore –

    +0

    임시 테이블의 범위가 쿼리 단위가 아닌 세션 단위 (https://msdn.microsoft.com/en-us/library/ms174979.aspx)이므로 다소 이상하게 보입니다. 세션을 중단하고 연결 상태를 유지 하시겠습니까? 동시에 여러 쿼리를 실행하는 사용자가 충돌을 일으킬 수 있으므로 글로벌 임시 테이블을 사용하지 않도록주의해야합니다. –