2010-10-06 48 views
0

我有一個複合鍵,ID(int,autogenerated)和TaxpayerID(varchar,用戶輸入它)的SQL表。當用戶註冊時,他們輸入一個納稅人ID &納稅人ID與ID結合成主鍵。有沒有辦法只返回複合主鍵的一部分?

通常在輸入記錄後,我會返回使用的@@ Identity並將其返回到.NET應用程序中的Integer變量。然而,這似乎是失敗的,我認爲這是一個複合關鍵。

有沒有辦法只返回複合主鍵的一部分? (在這種情況下,只是ID字段)

+0

他們是2個不同的列。 ID是一個i​​nt,TaxpayerID是一個varchar。 DBA將它們設置爲組合鍵。但是我只需要插入記錄後返回的一個(ID)。 – donde 2010-10-06 17:26:32

+0

你怎麼知道「這似乎是失敗的」?你看到什麼表明有問題? – bobs 2010-10-06 17:27:17

+0

當我在查詢分析器中運行它似乎確實返回ID。但是,當它回到.NET時,它在轉換爲整型變量時失敗。我檢查了4次,以確保我的變量是int,並且此列是int。 – donde 2010-10-06 17:35:17

回答

2

建議返回SCOPE_IDENTITY()。這將返回您範圍內創建的最後一個IDENTITY值。我建議更喜歡SCOPE_IDENTITY(),因爲

SCOPE_IDENTITY和@@ IDENTITY返回當前會話中任何表中生成的最後一個標識值。但是,SCOPE_IDENTITY返回僅在當前範圍內插入的值; @@ IDENTITY不限於特定範圍。

在你的情況,這是一個有點用化合物糊塗,但如果你正在尋找的自動遞增的IDENTITY場,這會爲你做它。桌上的PK並不重要。如果有一個標有IDENTITY的字段,並且您希望將其返回,請在INSERT後立即使用SCOPE_IDENTITY()

+0

但不會返回總密鑰(ID + TaxpayerID)而不僅僅是密鑰的ID部分。 – donde 2010-10-06 17:30:39

+0

@donde:不,那會返回最後插入的'IDENTITY'值。 – 2010-10-06 17:31:47

+0

也許我很困惑身份是什麼。這些列在表中被指定爲主鍵的一部分。難道這不會使他們兩個身份?還是身份由別的東西定義? – donde 2010-10-06 17:34:09

相關問題