pyodbc & MS SQL server – "Keine Ergebnisse. Vorheriges SQL war keine Abfrage. "

Ich verwende pyodbc, um data von einem Microsoft SQL server abzurufen. Die Abfrage ist von folgender Form

SET NOCOUNT ON --Ignore count statements CREATE TABLE mytable ( ... ) EXEC some_stored_procedure INSERT mytable --Perform some processing... SELECT * FROM mytable 

Die gespeicherte Prozedur führt eine Aggregation über Werte durch, die NULLs enthalten, so dass Warnungen des Formulars Warning: Null value is eliminated by an aggregate or other SET operation. werden ausgestellt. Dies führt dazu, dass pyodbc keine data mit der Fehlermeldung abruft. No results. Previous SQL was not a query. No results. Previous SQL was not a query.

Ich habe versucht, die Warnungen zu deaktivieren, indem SET ANSI_WARNINGS OFF . Allerdings schlägt die Abfrage dann mit der Fehlermeldung fehl 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. 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. .

Ist es möglich, zu

  • deaktiviere die Warnungen
  • oder pyodbc ignorieren die Warnungen?

Beachten Sie, dass ich keine permissions zum Ändern der gespeicherten Prozedur habe.

memoryn Sie die Ergebnisse der Abfrage in einer temporären Tabelle und führen Sie die statement als zwei Abfragen aus:

 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 

Die erste Abfrage macht das schwere Heben und ist von der Form

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

Die zweite Abfrage ruft die data ab und ist von der Form

 SELECT * FROM #datastore 

So werden alle Warnmeldungen bei Ausführung der ersten Abfrage ausgegeben. Sie stören bei der Ausführung der zweiten Abfrage nicht den dataabruf.