我读到使用OUTPUT子句可能是检索新插入记录的标识的最佳方法。我很确定我可以写一个存储过程并调用它,但我的业务对象使用动态生成的sql,因此必须使用存储过程会有问题。任何人都可以告诉我如何使用ado.net执行带输出子句的单个输入语句并获取返回的标识值?看起来可能无法以这种方式完成,但我想我会问......
编辑:好的,这比我想象的要容易......我以为我必须先输出一个表变量。但是我现在这样做的方式并不正常,因为它在插入新记录之前返回了身份'。以下是我刚刚测试的声明:INSERT Test (F1)
OUTPUT SCOPE_IDENTITY()
VALUES ('Testing')
每次我执行此操作时,它会返回一个结果,该结果比最后插入的记录的Identity实际值的值低一个数字。我只想在结果中添加1,但当我走到表之间并且最后一个结果来自不同的表时,这当然不起作用。
我想知道我是否应该使用IDENT_CURRENT('Test')并添加1,因为它将作为单个事务处理,我不必担心并发问题。
有关如何获得正确结果的任何想法吗?
答案 0 :(得分:2)
如果您的身份字段名称为 ID ,请使用如下:
INSERT Test (F1)
OUTPUT INSERTED.Id
VALUES ('Testing')
SCOPE_IDENTITY()
返回的值将在insert
之后发生变化,显然OUTPUT
完成
或保持简单:
INSERT Test (F1)
VALUES ('Testing')
SELECT SCOPE_IDENTITY()
你甚至不知道什么是身份字段。