Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SELECT SCOPE_IDENTITY()始终返回1_Sql Server - Fatal编程技术网

Sql server SELECT SCOPE_IDENTITY()始终返回1

Sql server SELECT SCOPE_IDENTITY()始终返回1,sql-server,Sql Server,我正在使用此查询: INSERT INTO [LepidoliteDB].[dbo].[EGelLayerWeighingData] ([EGelWeighingDataID], [Amount], [ContainerID], [Portions], [PortionNumber], [Canceled], [LayerID], [WeighingDone], [InsertDone], [MeasuresDone], [StartDateAndTime], [EndDateAndTime])

我正在使用此查询:

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

SELECT SCOPE_IDENTITY()
但是
SCOPE\u IDENTITY()
总是返回1


我遗漏了什么?

最好的写作方法是

RETURN  SCOPE_IDENTITY()  
您也可以使用
@@IDENTITY
IDENT_CURRENT
来执行此操作

SCOPE_IDENTITY、IDENT_CURRENT和@IDENTITY是类似的函数,因为它们返回插入到标识列中的值

当前标识不受范围和会话的限制;它仅限于指定的表。IDENT_CURRENT返回为任何会话和任何作用域中的特定表生成的值。有关详细信息,请参阅当前标识(Transact-SQL)

SCOPE_IDENTITY和@IDENTITY返回在当前会话的任何表中生成的最后一个标识值。但是,SCOPE_IDENTITY返回仅在当前范围内插入的值@@标识不限于特定的范围


因此,RETURN SCOPE_IDENTITY()是最好的方法。

编写它的最好方法是

RETURN  SCOPE_IDENTITY()  
您也可以使用
@@IDENTITY
IDENT_CURRENT
来执行此操作

SCOPE_IDENTITY、IDENT_CURRENT和@IDENTITY是类似的函数,因为它们返回插入到标识列中的值

当前标识不受范围和会话的限制;它仅限于指定的表。IDENT_CURRENT返回为任何会话和任何作用域中的特定表生成的值。有关详细信息,请参阅当前标识(Transact-SQL)

SCOPE_IDENTITY和@IDENTITY返回在当前会话的任何表中生成的最后一个标识值。但是,SCOPE_IDENTITY返回仅在当前范围内插入的值@@标识不限于特定的范围


因此,RETURN SCOPE_IDENTITY()是最好的一个。

这里可能有一个代替/for的触发器?您使用的是什么版本的MSSQL?您是否尝试过在没有数据库名称的情况下执行此操作?你试过用“开始-结束”块吗


你读过这篇文章了吗?

也许你有一个代替/for的触发器?您使用的是什么版本的MSSQL?您是否尝试过在没有数据库名称的情况下执行此操作?你试过用“开始-结束”块吗


你读过这篇文章吗?

我知道这是一个旧线程,但我遇到了同样的问题,我通过进入XSD并在查询中,将查询的ExecuteMode从NonQuery更改为Scalar,设法解决了这个问题。这会阻止它始终返回1,而不是返回先前添加的行的ID


这可能是因为我后来试图将SELECT添加到INSERT中,而不是一次完成所有操作,UI为我正确地创建了它。

我知道这是一个旧线程,但我也遇到了同样的问题,我通过进入XSD并在查询中解决了这个问题,将查询的ExecuteMode从NonQuery更改为Scalar。这会阻止它始终返回1,而不是返回先前添加的行的ID


这可能是因为我后来试图将SELECT添加到INSERT中,而不是一次完成所有操作并让UI为我正确地进行操作。

我遇到了这个问题,我必须承认这是一个愚蠢的错误,但我认为这可能会发生在其他人身上。我使用的是返回受影响行数的Execute命令,而不是查询命令


顺便说一下,我在一个命令中将Insert和SELECT SCOPE_IDENTITY()组合在一起,这就是为什么我开始使用Execute命令。我仍然能够组合它们,但我使用了ExecuteScalar。

我遇到了这个问题,我必须承认这是一个愚蠢的错误,但我认为这可能会发生在其他人身上。我使用的是返回受影响行数的Execute命令,而不是查询命令


顺便说一下,我在一个命令中将Insert和SELECT SCOPE_IDENTITY()组合在一起,这就是为什么我开始使用Execute命令。我仍然可以将它们组合起来,但我使用了ExecuteScalar。

您是否检查过是否已将id键设置为主键?不确定这是否与您的场景相关,但我只是想知道所述表中的哪一列实际定义为“标识”列?如果在SQLServerManagementStudio中运行该列,它将失败。您是否在应用程序中运行此功能?请张贴所有涉及的代码。还指示定义为标识的列column@Nick.McDermaid-为什么它会在SSMS中失败?@Nick.McDermaid我将此查询用于vb.net TableAdapters。我的Primery键是带有标识规范的“ID”字段(不是EGelWeighingDataID字段)。我正在使用Sql Server Management Studio 2012。您是否检查过是否已将id键设置为主键?不确定这是否与您的场景相关,但只想知道您在所述表中实际将哪列定义为“标识”列?如果在Sql Server Management Studio中运行该列,则会失败。您是否在应用程序中运行此功能?请张贴所有涉及的代码。还指示定义为标识的列column@Nick.McDermaid-为什么它会在SSMS中失败?@Nick.McDermaid我将此查询用于vb.net TableAdapters。我的Primery键是带有标识规范的“ID”字段(不是EGelWeighingDataID字段)。我使用的是Sql Server Management Studio 2012。一个愚蠢的错误,对于使用ado.net的用户,必须执行Calar,Execute返回受影响的行数一个愚蠢的错误,对于使用ado.net的用户,必须执行Calar,Execute返回受影响的行数