2015-10-13 164 views
0

我使用這個查詢:SELECT SCOPE_IDENTITY()始終返回1

INSERT INTO [LepidoliteDB].[dbo].[EGelLayerWeighingData] ([EGelWeighingDataID], [Amount], [ContainerID], [Portions], 
[PortionNumber], [Canceled], [LayerID], [WeighingDone], [InsertDone], 
[MeasuresDone], [StartDateAndTime], [EndDateAndTime]) 
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?); 

SELECT SCOPE_IDENTITY() 

SCOPE_IDENTITY()總是返回1

我缺少什麼?

+0

您是否檢查過您已將您的ID密鑰設置爲主鍵? – pedram

+0

不確定這是否與您的方案相關,但只是想知道您提到的表中的哪一列實際上已定義爲「身份」列? –

+0

如果您在SQL Server Management Studio中運行它,它將會失敗。你在應用程序中運行這個嗎?請張貼所有涉及的代碼。還指出哪一列被定義爲標識列 –

回答

0

寫這是最好的方式..

RETURN SCOPE_IDENTITY() 

您還可以使用@@IDENTITYIDENT_CURRENT這個

SCOPE_IDENTITY,IDENT_CURRENT和@@ IDENTITY是相似的功能,因爲他們返回插入值進入身份專欄。

IDENT_CURRENT不受範圍和會話的限制;它僅限於指定的表格。 IDENT_CURRENT返回爲任何會話和任何範圍中的特定表生成的值。有關更多信息,請參閱IDENT_CURRENT(Transact-SQL)。

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

因此RETURN SCOPE_IDENTITY()是最好的。

1

我知道這是一個古老的線程,但我有同樣的問題,我設法進入我的XSD和查詢,以解決它,改變的ExecuteMode從NonQuery到Scalar的查詢。這停止了​​它總是返回1,而是返回先前添加的行的ID。

這可能是我試圖將SELECT添加到INSERT之後,而不是一次完成並且UI爲我正確設置它。