SELECT SCOPE_IDENTITY()始终返回1
问题描述:
我使用这个查询: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
我缺少什么?
答
写这是最好的方式..
RETURN SCOPE_IDENTITY()
您还可以使用@@IDENTITY
和IDENT_CURRENT
这个
SCOPE_IDENTITY,IDENT_CURRENT和@@ IDENTITY是相似的功能,因为他们返回插入值进入身份专栏。
IDENT_CURRENT不受范围和会话的限制;它仅限于指定的表格。 IDENT_CURRENT返回为任何会话和任何范围中的特定表生成的值。有关更多信息,请参阅IDENT_CURRENT(Transact-SQL)。
SCOPE_IDENTITY和@@ IDENTITY返回当前会话中任何表中生成的最后一个标识值。但是,SCOPE_IDENTITY返回仅在当前范围内插入的值; @@ IDENTITY不限于特定范围。
因此RETURN SCOPE_IDENTITY()是最好的。
答
也许你有一个代替/为触发吗?你使用的是什么版本的MSSQL?你有没有尝试过没有数据库名称?你是否尝试过使用开始块?
答
我知道这是一个古老的线程,但我有同样的问题,我设法进入我的XSD和查询,以解决它,改变的ExecuteMode从NonQuery到Scalar的查询。这停止了它总是返回1,而是返回先前添加的行的ID。
这可能是我试图将SELECT添加到INSERT之后,而不是一次完成并且UI为我正确设置它。
您是否检查过您已将您的ID密钥设置为主键? – pedram
不确定这是否与您的方案相关,但只是想知道您提到的表中的哪一列实际上已定义为“身份”列? –
如果您在SQL Server Management Studio中运行它,它将会失败。你在应用程序中运行这个吗?请张贴所有涉及的代码。还指出哪一列被定义为标识列 –