【发布时间】:2012-02-09 17:09:11
【问题描述】:
我读到使用 OUTPUT 子句可能是检索新插入记录的标识的最佳方式。我很确定我可以编写一个存储过程并调用它,但是我的业务对象使用动态生成的 sql,因此必须使用存储过程会有问题。谁能告诉我如何使用 ado.net 执行带有输出子句的单个输入语句并获取返回的标识值?看起来可能无法完全这样做,但我想我会问......
编辑:好的,这比我想象的要容易......我以为我必须首先输出到一个表变量。但是我现在这样做的方式不太正确,因为它在“插入”新记录之前返回身份。这是我刚刚测试的语句:
INSERT Test (F1)
OUTPUT SCOPE_IDENTITY()
VALUES ('Testing')
每次我这样做时,它都会返回一个比最后插入记录的 Identity 实际值低一个数字的结果。我只会在结果中加 1,但是当我在表之间移动并且最后一个结果来自不同的表时,这当然行不通。
我想知道是否应该使用 IDENT_CURRENT('Test') 并将其加 1,因为它将作为单个事务处理,我不必担心并发问题。
关于如何获得正确结果返回的任何想法?
【问题讨论】:
-
你是在问如何返回@@IDENTITY 作为存储过程的输出参数,假设有一个插入?
标签: c# sql-server ado.net