我有一个现有的sybase ase表,它使用IDENTITY作为主键。现在我需要重新创建这个表,但我想从prod env中的IDENTITY PK的下一个值开始PK。例如如果当前PK = 231,那么在重新创建之后我希望它从232开始或任何其他INTEGER值> 231.
在oracle中,它很容易配置一个序列号,我们可以开始但是在sybase中,因为我们没有序列可用所以我尝试使用newid()函数,但它给出二进制(16)值,而我想要整数值。
有人可以提出建议吗?
答案 0 :(得分:1)
我打算使用下面提到的内容,我认为它可以解决我的问题。如果有人有更好的解决方案,请告诉我。
选择abs(hextoint(newid()))
对此解决方案的任何想法?这会产生与它已经生成的相同的数字吗?
答案 1 :(得分:0)
select next_identity('tablename')将返回具有标识列的表的下一个插入的标识值,以便您知道接下来将分配哪个ID。
在插入后立即选择@@ identity将返回刚刚插入行的ID。
然而,您需要小心,因为标识列与序列不同,如果您想要一个没有间隙的序列,则不应该依赖它,因为如果数据库崩溃或关闭,您将获得间隙(尽管有时很小)与nowait。对于这些,数字喷泉/插入触发类型生成ID是更好的选择。使用“标识插入”仅适用于您希望批量加载整个表的情况 - 您不应该为每个插入设置它,否则您将破坏标识列的全部目的,即快速生成新的键值。