请你帮我解决这个问题:
在我的一个脚本中,我将一些数据插入到某个表“Item”中。 “Item”表中的一列是“ItemNumber”。
我希望能够调用某个函数(很可能是一个存储过程),它会返回一个我可以用于ItemNumber的数字。
我不能使用AutoIncrement,因为ItemNumber是唯一的,并且在不同的脚本中可能会发生冲突我在“Item”中插入数据,已经有“ItemNumber”
我只知道“ItemNumber”的最大数量,之后我可以自由使用。
我需要这个storedProc的表来存储下一个要使用的号码,对吗?
我正在考虑创建一个包含MaxNumber的一个列表和一个存储过程,它会返回MaxNumber 并将MaxNumber增加1以供下次使用
我需要帮助编写存储过程及其使用 with INSERT INTO Item
调用。
编辑:
基本上我从5个旧表中获取数据,其中ItemNumber为NULL或设置。对于设置的那些,它们都是唯一的数字。 对于ItemNumber为NULL的数据,我想分配它,最好的方法是什么?
请帮忙!
谢谢,
巫毒
答案 0 :(得分:2)
(假设SQL Server - 可能适用于大多数SQL实现)
如果在字段上使用IDENTITY约束,则服务器将不允许存在重复实例。正如其中一条评论所指出的那样,在这种情况下,该值是在服务器上计算的,而您的应用程序不会(并且在正常情况下不能)提供它。
请注意,服务器不保证数字是连续的 - 如果您进行插入并中止事务,那么本来使用的值将“丢失” - 服务器将不会再次提供它。 / p>
如果您需要具有连续的ID号,则需要具有serlialised访问权限才能更新表,您需要管理该表,哪些效率不高。 (您仍然可以将其声明为IDENTITY列,但需要为每次更新的表设置IDENTITY_INSERT On。)
其他:
可能有点像kludge,但可能适用于一次性场景。 您是否考虑将数据复制到新表中,其中设置了ID,然后应用IDENTITY约束,并插入具有NULL ID的那些(允许服务器为您分配它们?) 这可能会解决您的具体问题。