2013-10-15 4 views
3

Я создал таблицу, названную участником, состоящей из участника_ID (который является первичным ключом и является личным [имеет автозначение]) и session_ID (который является внешним ключом).Как получить последний созданный идентификатор в SQL

Когда я создаю нового участника, я хотел бы сохранить его member_ID.

У меня есть следующий код, но я получаю следующее сообщение об ошибке сообщение: «проблема синтаксиса рядом вернувшихся»

connection = pyodbc.connect('Driver={SQL Server Native Client 11.0};Serve=:xxx;Database=xxx;Uid=xxx;Pwd=xxx') 
cur = connection.cursor() 
pID = cur.execute('INSERT INTO participant(sessions_ID) VALUES (40) RETURNING participant_ID') 

Большое спасибо заранее!

+0

Возможный дубликат/связанное - [Возвращение значения из инструкции INSERT в SQL Server 2008] (http://stackoverflow.com/questions/7825005/returning-a-value-from-an-insert-statement -в-SQL-сервер-2008). – Dukeling

ответ

0

Попробуйте SELECT @@Identity после запроса на вставку, это вернет первичный ключ Значение столбца идентификатора для текущего соединения.

+0

I WROTE pID = cur.execute («SELECT @@ Identity») после предыдущего запроса, но я получаю следующее: vcvd

+0

вам нужно добавить «.fetchone()» – bluerubez

4

Вы можете сделать это 2 способов

  1. select SCOPE_IDENTITY() - это является предпочтительным, поскольку он ограничен рамкой идентичности, созданной Вами.

  2. select @@IDENTITY - это последнее удостоверение, которое было создано независимо от области действия (например, триггер может создавать дополнительные идентификаторы).

Подробнее здесь: http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

+0

I WROTE pID = cur.execute («SEELECT @@ Identity») после предыдущего запроса, но я получаю следующее: ... Как я могу получить значение ID? – vcvd

+0

У вас есть двойной EE в избранном? – Szymon

+0

Извините, нет. На самом деле у меня нет двойного EE в моем коде. – vcvd

2

Это действительно очень старый пост, я знаю, - но у меня был тот же вопрос и пришел на него. Я получил свою работу и думал, что поделюсь тем, кто спотыкается здесь, как и я. Пожалуйста, будьте добры, это был мой первый проход в коде. Это некрасиво, но вам нужно начать.

with pypyodbc.connect('DRIVER={SQL Server Native Client 11.0}; ' + self.cnx_str) as connection: 
     cursor = connection.cursor() 
     cursor.execute(query) 

     if query_type is QueryType.create: 
      try: 
       cursor.execute("SELECT SCOPE_IDENTITY()") 
       row = cursor.fetchone() 
       seed_id = row[0] 
      except AttributeError: 
       seed_id = 0 
      cursor.commit() 
      return seed_id 

     if query_type is not QueryType.read: 
      cursor.commit() 
+0

Проблема с этим ответом заключается в том, что он не объясняет, откуда взялись 'query_type' и' QueryType'. – DataHerder

+0

@DataHerder; Я вижу, как это может сбивать с толку - это просто перечисление, которое я создал, чтобы перейти к моему методу. Его можно игнорировать, важной частью является код внутри оператора create if. – SteveJ

Смежные вопросы