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.

Solutions Collecting From Web of "pyodbc & MS SQL server – "Keine Ergebnisse. Vorheriges SQL war keine Abfrage. ""

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.