首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可编辑的Auto-Increment客户标识?

是否有可编辑的Auto-Increment客户标识?
EN

Stack Overflow用户
提问于 2011-04-09 05:56:19
回答 3查看 335关注 0票数 0

我需要它的原因是我在我的表上创建了一个名为display_order的列,现在它是小整数,并且数字是预先确定的。

然而,当我用我的软件插入一个新记录时,我不知道如何获得该列中的最高数字并添加1,所以我考虑了一个自动递增的列的可能性,如果我将8更改为9,它将相应地更改其他所有内容。

这个是可能的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-09 08:09:03

但是,当我用软件插入一个新记录时,我不知道如何获得该列中的最高数字并添加1,

代码语言:javascript
复制
Insert MyTable( display_order, .... )
Select (
        Select Max(display_order) + 1
        From MyTable As T1
        ), ...
From MyTable

但是,我不推荐这样做。如果display_order是用户可设置的,那么我将简单地假设相对值。因此,如果用户添加了两个display_order = 0的值也没关系。如果你真的想走得更远,并提供对display_order重新排序的能力,你可以这样做:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2011-04-09 06:41:21

你的问题的答案是“否”IDENTITY是唯一的自动递增功能(并且这些列是不可更新的)

但是,如果这是一个display_order字段,您不能只将其设为float,以便允许您在其他项之间插入项,而不必将所有其他项向下移动以创建间隙吗?

票数 4
EN

Stack Overflow用户

发布于 2011-04-09 10:37:22

因为每个表只有一个IDENTITY列,所以如果没有提供,我可能会使用触发器或其他机制(如果有集中式插入存储过程)将其缺省为比表中的最高数字大1。这就避免了SET IDENTITY_INSERT或任何类似的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5601178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档