Как получить значение IDENTITY при использовании INSERT… OUTPUT с ADODBAPI - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь получить идентификатор недавно вставленной строки с помощью OUTPUT. Однако я получаю исключение: fetch () при закрытом соединении или пустом наборе запросов.

Я использую adodbapi для SQL подключения к серверу.

Код:

import adodbapi
Query = '''
        DECLARE @revisions_id table(revisions_id bigint);
        INSERT INTO [dbo].[revisions]
                   ([submitted_date]
                   ,[submission_received_date]
                   ,[form_number]
                   ,[ProcessTryCount])
        OUTPUT INSERTED.revisions_id INTO @revisions_id     
             VALUES
                   (GETDATE()
                   ,GETDATE()
                   ,?
                   ,0 )

        SELECT revisions_id FROM @revisions_id 
    '''
values = [2] 
connsql = a.sql_connection()
cursor = connsql.cursor()
cursor.execute(Query, values)
revisionsID = cursor.fetchone()
connsql.commit()
cursor.close()
connsql.close()

Исключение:

  File "TMSWorkflow.py", line 43, in CreateRevisions
    revisionsID = cursor.fetchone()
  File "C:\Users\adminuser2\AppData\Local\Programs\Python\Python35\lib\site-packages\adodbapi\adodbapi.py", line 922, in fetchone
    result = self._fetch(1)
  File "C:\Users\adminuser2\AppData\Local\Programs\Python\Python35\lib\site-packages\adodbapi\adodbapi.py", line 898, in _fetch
    self._raiseCursorError(api.FetchFailedError, 'fetch() on closed connection or empty query set')
  File "C:\Users\adminuser2\AppData\Local\Programs\Python\Python35\lib\site-packages\adodbapi\adodbapi.py", line 562, in _raiseCursorError
    eh(self.connection, self, errorclass, errorvalue)
  File "C:\Users\adminuser2\AppData\Local\Programs\Python\Python35\lib\site-packages\adodbapi\apibase.py", line 57, in standardErrorHandler
    raise errorclass(errorvalue)
adodbapi.apibase.FetchFailedError: fetch() on closed connection or empty query set
...