SQL存储过程 - 请帮我写这个!

时间:2010-06-30 15:56:53

标签: sql database stored-procedures sybase

请你帮我解决这个问题:

在我的一个脚本中,我将一些数据插入到某个表“Item”中。 “Item”表中的一列是“ItemNumber”。

我希望能够调用某个函数(很可能是一个存储过程),它会返回一个我可以用于ItemNumber的数字。

我不能使用AutoIncrement,因为ItemNumber是唯一的,并且在不同的脚本中可能会发生冲突我在“Item”中插入数据,已经有“ItemNumber”

我只知道“ItemNumber”的最大数量,之后我可以自由使用。

我需要这个storedProc的表来存储下一个要使用的号码,对吗?

我正在考虑创建一个包含MaxNumber的一个列表和一个存储过程,它会返回MaxNumber 并将MaxNumber增加1以供下次使用

我需要帮助编写存储过程及其使用 with INSERT INTO Item调用。

编辑:

基本上我从5个旧表中获取数据,其中ItemNumber为NULL或设置。对于设置的那些,它们都是唯一的数字。 对于ItemNumber为NULL的数据,我想分配它,最好的方法是什么?

请帮忙!

谢谢,

巫毒

1 个答案:

答案 0 :(得分:2)

(假设SQL Server - 可能适用于大多数SQL实现)

如果在字段上使用IDENTITY约束,则服务器将不允许存在重复实例。正如其中一条评论所指出的那样,在这种情况下,该值是在服务器上计算的,而您的应用程序不会(并且在正常情况下不能)提供它。

请注意,服务器不保证数字是连续的 - 如果您进行插入并中止事务,那么本来使用的值将“丢失” - 服务器将不会再次提供它。 / p>

如果您需要具有连续的ID号,则需要具有serlialised访问权限才能更新表,您需要管理该表,哪些效率不高。 (您仍然可以将其声明为IDENTITY列,但需要为每次更新的表设置IDENTITY_INSERT On。)

其他:

可能有点像kludge,但可能适用于一次性场景。 您是否考虑将数据复制到新表中,其中设置了ID,然后应用IDENTITY约束,并插入具有NULL ID的那些(允许服务器为您分配它们?) 这可能会解决您的具体问题。