IDENTITY
插入行的最佳方法是什么?
我知道@@IDENTITY
和IDENT_CURRENT
和SCOPE_IDENTITY
,但不明白连接到每个利弊。
有人可以解释这些差异以及何时使用它们吗?
@@IDENTITY
返回在所有范围内为当前会话中的任何表生成的最后一个标识值。 您需要小心 ,因为它是跨作用域的。您可以从触发器获取值,而不是当前语句。
SCOPE_IDENTITY()
返回为当前会话和当前范围中的任何表生成的最后一个标识值。 通常,您要使用什么 。
IDENT_CURRENT('tableName')
返回在任何会话和任何作用域中为特定表生成的最后一个标识值。这可以让您指定要从哪个表中获取值,以防上述两个表不是您真正需要的表( 非常少见 )。另外,正如@GuyStarbuck提到的那样,“如果要获取未插入记录的表的当前IDENTITY值,则可以使用它。”
该OUTPUT
条款的的INSERT
声明将让您访问每一个经该语句插入行。由于它是针对特定语句的,因此它比上面的其他函数 更直接 。但是,它有些 冗长 (您需要将其插入到表变量/临时表中,然后对其进行查询),即使在语句回滚的错误情况下,它也可以提供结果。也就是说,如果您的查询使用并行执行计划,则这是 唯一 获得身份的 保证方法 (缺少关闭并行性)。但是,它 在 触发器 之前 执行 , 不能用于返回触发器生成的值。
问题内容: 在iPhone上,使用FMDB获取SQLite数据库中最后插入的行的ID的最佳方法是什么? 有没有比做更好的方法: 问题答案: 如果可以保证您的列是自动递增的列,那很好。 但不管怎样,有一个专门的SQLite函数称为: 在FMDB中,您使用方法(在内部运行上述方法):
问题内容: 我正在寻找一种在Oracle 9数据库中执行多行插入的好方法。以下内容在MySQL中有效,但Oracle似乎不支持以下内容。 问题答案: 这在Oracle中有效: 这里要记住的是使用语句。
问题内容: 我必须在遗留数据库的表中插入一些记录,并且由于其他古代系统使用了该记录,因此更改表不是解决方案。 问题在于目标表具有int主键,但没有标识规范。因此,我必须找到下一个可用的ID并使用该ID: 但是,在执行此操作时,我想防止其他应用程序插入表中,以免出现任何问题。我尝试了这个: 在SQL Management Studio中的两个不同的窗口中,一个事务始终作为死锁受害者被杀死。 我也首先
我只是想知道如何实现这一点的当前最佳实践是什么,所以我一定会走上正确的道路。
问题内容: 我有ID为的商品。现在我有如下数据。每行都有一个offerId。由数组中的组合组成。是那个的价值 现在,我必须选择所有给我提供最佳ID组合(即最大总折扣)的offerId。 例如,在上述情况下:可能的结果可能是: [o2,o4,o5]最大折扣为。 注意。结果offerId应该不会重复ID。id的示例为[1,3,4],[5],[6]都是不同的。 其他组合可以是: 其id为[1],[3,5