SQL Server 2008中的两个标识列

问题描述 投票:3回答:2

我在SQL Server中创建了一个包含三列的表。我希望前两列逐一递增计数。我使用第一列作为标识列,在插入行时自动递增1。我试图对第二列做同样的事情(但SQL Server不允许每个表有两个标识列)。我发现了使用Sequence的另一种方式,但由于我使用的是SQL Server 2008,因此它没有此功能。

我怎样才能完成任务?

我在报告中使用第一个标识列,并在达到计数时重置它;例如,当它达到20时,我将其重置为1(已编辑)。我将使用第二个增量列对数据进行排序,我不打算重置它。

create table tblPersons
(
    IDCol int primary key identity(1,1),
    SortCol int primary key identity(1,1),
    Name nvarchar(50)
)

PS:我无法将IDCol的值复制到SortCol,因为当我从我的代码中将IDCol重置为20时,SortCol将复制相同的值(相反它应该继续到21,22,23等等)

sql sql-server sql-server-2008
2个回答
3
投票

如果您计划始终同时递增两列,则此处的一种解决方法可能是仅使用单个自动增量列,但使用该计数器的剩余部分除以第二个值的20:

CREATE TABLE tblPersons (
    IDCol int PRIMARY KEY IDENTITY(1,1),
    Name nvarchar(50)
)

SELECT
    IDCol,
    IDCol % 20 AS SortCol    -- this "resets" to zero upon reaching 20
FROM tblPersons;

1
投票

作为替代解决方案,您可以使用Computed Column

create table tblPersons
(
    SortCol int primary key identity(1,1),
    IDCol AS CASE WHEN (SortCol % 20) = 0 THEN 20 ELSE (SortCol % 20) END ,
    Name nvarchar(50)
)
© www.soinside.com 2019 - 2024. All rights reserved.