SQL Server 2008中的两个标识列

SQL Server 2008中的两个标识列,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在SQL Server中创建一个包含三列的表。我希望前两列逐个递增计数。我使用第一列作为标识列,当插入行时,该列将自动递增1。我尝试对第二列执行相同的操作(但SQL Server不允许每个表有两个标识列)。我找到了另一种方法,即使用序列,但由于我使用的是SQL Server 2008,因此它没有此功能 我怎样才能完成我的任务 我正在报告中使用第一个标识列,当达到某个计数时,我将其重置;例如,当它达到20时,我将其重置为1(已编辑)。我将使用第二个增量列对数据进行排序,我不打算重置它 crea

我正在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等等)

如果您计划始终同时增加两列,这里的一个解决方法可能是只使用一个自动递增列,但使用该计数器的剩余部分除以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;

作为替代解决方案,您可以使用
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)
)

谢谢你的回复@Tim,你的解决方案正是我所需要的。IDCol增量工作正常,直到达到计数20,在计数20时,IDCol列重置为0。关于如何解决此问题并避免0的任何提示。(我希望它从1增加到20并重复)快照链接也附在下面。再次感谢快照链接:@Rizwan606我更新了我的答案。考虑使用<代码>(IdCol % 19)+ 1 < /代码>作为范围1到19的公式,在重击20时计数器复位为1。也可以只使用一个窗口函数,如<代码> RouthNoMulb()/<代码>假设您不只是纯粹地构建表。reporting@TimBiegeleisen长官,我在更新中遇到了另一个问题。第二列现在从2开始。即使我使用((IdCol%19)+1)作为SortCol(并使用第一个答案)来选择它,也会出现同样的问题。我想从1到20使用它,然后从1到20重复。对不起打扰你了。更新截图:@Charleh先生,我仅将表格用于crystal报告。第一列将用于选择数据(插入数据的顺序),第二列将用于显示从1到20的数据,然后再次显示从1到20的编号。感谢您的回复@Serkan,IDCol增量工作正常,直到达到计数20,在20时,IDCol列重置为0。关于如何解决此问题并避免0的任何提示。(我希望它从1增加到20并重复)快照链接也附在下面。再次感谢快照链接:prntscr.com/hrq5zz