SQL生成子版本号(系列生成)

SQL生成子版本号(系列生成),sql,sql-server,sql-server-2005,asp.net-ajax,Sql,Sql Server,Sql Server 2005,Asp.net Ajax,下面是我的表格模式: 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 N

下面是我的表格模式:

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)
关于表格的简短说明,用户每次都可以选择将Desc[根据用户的用户信息]另存为一个单独的版本。我想为创建的每个subVersion生成一个版本号。parentId字段保存正在为其创建subversion的PK ID。 例如,下面的一些记录

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,我希望生成一个递增的版本号。

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

编辑-重新阅读您的描述和评论我意识到,拥有版本1的家长和第一个孩子是有意的:

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

给定您的示例数据,您需要的输出是什么?示例数据就是输出,我应该解释得更多。记录1是样本数据。从记录2中,您可以看到它们的parentId指示它们是subversion,因此对于每个subversion,版本号都会递增。我想要的代码就是这一代的subversion数字。@EdHarper我不知道这是否是一个优雅的解决方案,但似乎能给我答案。Ed您能否更正我选择CASESELECT COUNT*时为'0'然后为'1'ELSE MAXversion+1 END FROM SAMPLE WHERE parentId='2'[或其他值]@Deeptechtons-我不确定您的代码是否会提供所需的输出,但您所要求的应该是可能的。在您的示例数据中,boardId 2和3的顺序是如何确定的?@EdHarper boardId是种子值为1的增量标识列。board id为2和3的记录是为了测试subversion过程而创建的,但最终每个新记录的版本号都相同。于是这个职位就这样产生了。现在它是在设计级别完成的,我使用DataView获取subversion记录,然后获取它们的计数和增量1。