2013-10-15 30 views
3

我創建了由participant_ID(主鍵和身份[具有自動值])和session_ID(它是外鍵)組成的參與者表。如何獲取SQL中創建的最後一個ID

當我創建一個新的參與者時,我想存儲它的participant_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 -in-SQL服務器2008)。 – Dukeling

回答

0

插入查詢後請嘗試SELECT @@Identity這將返回當前連接的主鍵標識列值。這是優選的,因爲它是由範圍僅限於您所創建的身份 -

+0

我在前面的查詢之後寫了pid = cur.execute(「SELECT @@ Identity」),但我得到以下內容: vcvd

+0

您必須追加「.fetchone()」 – bluerubez

4

您可以通過兩種方式

  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;我可以看到這可能會令人困惑 - 它只是我創建的一個枚舉,以傳遞給我的方法。它可以被忽略,重要的部分是創建'if'語句中的代碼。 – SteveJ

相關問題