我需要它的原因是我在我的表上创建了一个名为display_order的列,现在它是小整数,并且数字是预先确定的。
然而,当我用我的软件插入一个新记录时,我不知道如何获得该列中的最高数字并添加1,所以我考虑了一个自动递增的列的可能性,如果我将8更改为9,它将相应地更改其他所有内容。
这个是可能的吗?
发布于 2011-04-09 08:09:03
但是,当我用软件插入一个新记录时,我不知道如何获得该列中的最高数字并添加1,
Insert MyTable( display_order, .... )
Select (
Select Max(display_order) + 1
From MyTable As T1
), ...
From MyTable但是,我不推荐这样做。如果display_order是用户可设置的,那么我将简单地假设相对值。因此,如果用户添加了两个display_order = 0的值也没关系。如果你真的想走得更远,并提供对display_order重新排序的能力,你可以这样做:
Update MyTable
Set display_order = Z.NewSeq
From (
Select PKCol
, Row_Number() Over ( Order By display_order ) As NewSeq
From MyTable
) As Z
Join MyTable As T
On T.PKCol = Z.PKCol发布于 2011-04-09 06:41:21
你的问题的答案是“否”IDENTITY是唯一的自动递增功能(并且这些列是不可更新的)
但是,如果这是一个display_order字段,您不能只将其设为float,以便允许您在其他项之间插入项,而不必将所有其他项向下移动以创建间隙吗?
发布于 2011-04-09 10:37:22
因为每个表只有一个IDENTITY列,所以如果没有提供,我可能会使用触发器或其他机制(如果有集中式插入存储过程)将其缺省为比表中的最高数字大1。这就避免了SET IDENTITY_INSERT或任何类似的事情。
https://stackoverflow.com/questions/5601178
复制相似问题