SQL Server 2008中的两个标识列

时间:2017-12-24 06:49:39

标签: sql sql-server sql-server-2008

我在SQL Server中创建了一个包含三列的表。我希望前两列逐一递增计数。我使用第一列作为标识列,在插入行时自动递增1。我试图对第二列做同样的事情(但SQL Server不允许每个表有两个标识列)。我发现使用序列的另一种方式,但由于我使用的是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等等)

2 个答案:

答案 0 :(得分: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 :(得分: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)
)