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