首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL生成subversion号(Series Generation)

SQL生成subversion号(Series Generation)
EN

Stack Overflow用户
提问于 2011-03-31 12:36:18
回答 1查看 139关注 0票数 1

下面是我的表架构:

代码语言:javascript
复制
CREATE TABLE [dbo].[Sample](
    [BoardId] [int] IDENTITY(1,1) NOT NULL,
    [UserCode] [nvarchar](20) NOT NULL,
    [Desc] [nvarchar](100) NOT NULL,
    [Version] [int] NOT NULL,
    [ParentId] [int] NULL,
    [CreatedOn] [datetime] NOT NULL,
    [ModifiedOn] [datetime] NOT NULL)

表的简短说明,用户可以选择保存“描述”用户信息为每个用户作为一个单独的版本每次。我想为每个正在创建的subVersion生成一个版本号。parentId字段保存要为其创建subversion的主键ID。例如,下面的一些记录。

代码语言:javascript
复制
boardID        UserCode     Desc       Version   ParentID  CreatedOn       ModifiedOn
1              12343jhgs    blah blah    1          0        ---            ---
2              12343jhgs    blah blah    1          1        ---            ---
3              12343jhgs    blah blah    2          1        ---            ---
4              73627ggjh    lol lol ol   1          0        ---            ---

希望你明白了,对于创建的每个subversion,我想生成一个递增的版本号。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-31 20:19:31

基于您的样本数据的示例。我假设具有相同ParentIdboardId实例的版本号由插入顺序决定。

EDIT -重新阅读你的描述和评论我意识到第一个版本的父母和第一个孩子是故意的:

代码语言:javascript
复制
DECLARE @Sample TABLE 
(
    [BoardId] [INT] NOT NULL,
    [UserCode] [NVARCHAR](20) NOT NULL,
    [Desc] [NVARCHAR](100) NOT NULL,
    [ParentId] [INT] NULL,
    [CreatedOn] [DATETIME] ,
    [ModifiedOn] [DATETIME]
)

INSERT @Sample
(boardID,UserCode,[Desc],ParentID)
VALUES
(1,'12343jhgs','blah blah',0),
(2,'12343jhgs','blah blah',1),
(3,'12343jhgs','blah blah',1),
(4,'73627ggjh','lol lol ol',0)


;WITH recCTE
AS
(
    SELECT  boardID,UserCode,[Desc],ParentID, BoardID AS TopParent, 0 as versionModifier
    FROM    @Sample
    WHERE   ParentId = 0

    UNION ALL

    SELECT  s.boardID,s.UserCode,s.[Desc],s.ParentID, r.TopParent, -1 as versionModifier
    FROM    @Sample AS s 
    JOIN    recCTE AS r 
    ON      r.BoardId = s.ParentId
)
SELECT  boardID,UserCode,[Desc],ParentID, BoardID, 
        ROW_NUMBER() OVER (PARTITION BY TopParent
                            ORDER BY    boardId
                          )   + versionModifier AS [Version]
FROM recCTE
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5495374

复制
相关文章

相似问题

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