Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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
C# 使用ado.net获取标识的输出子句示例?_C#_Sql Server_Ado.net - Fatal编程技术网

C# 使用ado.net获取标识的输出子句示例?

C# 使用ado.net获取标识的输出子句示例?,c#,sql-server,ado.net,C#,Sql Server,Ado.net,我读到,使用OUTPUT子句可能是检索新插入记录的标识的最佳方法。我很确定我可以编写一个存储过程并调用它,但我的业务对象使用动态生成的sql,因此必须使用存储过程会有问题。有人能告诉我如何使用ado.net执行带有output子句的单个input语句并获取返回的标识值吗?看起来这样做是不可能的,但我想我会问 编辑:好吧,这比我想象的要容易。。。我想我必须首先输出到一个表变量。但我现在这样做的方式并不完全正确,因为它是在插入新记录之前返回身份。以下是我刚刚测试的声明: INSERT Test (F

我读到,使用OUTPUT子句可能是检索新插入记录的标识的最佳方法。我很确定我可以编写一个存储过程并调用它,但我的业务对象使用动态生成的sql,因此必须使用存储过程会有问题。有人能告诉我如何使用ado.net执行带有output子句的单个input语句并获取返回的标识值吗?看起来这样做是不可能的,但我想我会问

编辑:好吧,这比我想象的要容易。。。我想我必须首先输出到一个表变量。但我现在这样做的方式并不完全正确,因为它是在插入新记录之前返回身份。以下是我刚刚测试的声明:

INSERT Test (F1)
OUTPUT SCOPE_IDENTITY()
VALUES ('Testing')
每次我这样做,它都会返回一个结果,比上次插入的记录的标识值实际值低一个数字。我只想在结果中加1,但当我在两个表之间切换,最后一个结果来自另一个表时,这当然不起作用

我想知道我是否应该使用IDENT_CURRENT(“Test”)并向其添加1,因为它将作为单个事务处理,我不必担心并发性问题


关于如何返回正确的结果,您有什么想法吗?

如果您的标识字段名是Id,请这样使用:

INSERT Test (F1)
OUTPUT INSERTED.Id
VALUES ('Testing')
SCOPE\u IDENTITY()
返回的值将在
insert
OUTPUT
完成后更改

保持简单:

INSERT Test (F1)
VALUES ('Testing')

SELECT SCOPE_IDENTITY()

您甚至不应该知道标识字段是什么。

您是在询问如何将@@identity作为存储过程的输出参数返回,假设存在插入项吗?谢谢,这就是我最后要做的,尽管这需要做更多的工作,因为我不一定知道名称将是Id。不幸的是,我以为通过ReturnValue SqlParameter获取值不会有任何问题,但我仍然没有做到……是的,我还试图避免使用第二种方法来尽可能地简化代码(否则我将不得不将其包装在事务中以确保没有并发问题)。但在任何情况下,我最终都是为了能够使用INSERTED,我才意识到我可以使用ExecuteScalar()来获取值。世界上的一切都是好的:)第二个完全是事务性的。其他事务不会干扰wint
SCOPE\u IDENTITY()
函数。除非将其放入事务中,否则它不是事务性的。很有可能,在您插入您的记录和获取值之间,其他人可以插入一条记录。还是我在这里遗漏了什么?我不认为我是,但如果是的话,请随时纠正我。@BrandonMoore是的,你失踪了。请参见此处:-此处声明:返回插入同一范围内标识列的最后一个标识值。作用域是一个模块:存储过程、触发器、函数或批处理。