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。