如何制作一个不是 id 并且可以在 SQL 服务器中复制的递增列

How to make an incremented column that is not an id and can be copied in SQL Server

我有一个 table,里面有很多手工输入的记录。通过navicat 需要能够按照添加的顺序进行排序。截至目前,我有一个名为 ID 的递增标识列,它是一个主键。但由于它是主键,所以无法复制该列,每次尝试输入新记录时都会出现错误 "field 'ID' can not be modified"。我可以有另一种递增且可以复制的数据类型吗?如果其中几个具有相同的 ID 值并不重要。我只需要按添加时间的一般顺序获取记录。

为了添加 id 列,我最初是这样做的:

alter table accnt add ID int identity(1,1) not null

但我不想让它成为主键,所以我尝试了这个但没有成功:

alter table accnt add ID int numeric(1,1)

alter table accnt add ID int varchar(1,1)

都没有运气。我怎样才能完成我想做的事情?

与其以特定顺序插入它们,不如考虑使用 select 语句以特定顺序使用它们。当您添加行时,行在 table 中的顺序对您想要执行的操作影响不大。您的身份 ID 列可以告诉您它们的添加顺序,例如:

Select ID
FROM accnt
ORDER BY ID ASC

Select ID
FROM accnt
ORDER BY ID DESC

如果您想确保可以按照添加的顺序对它们进行排序,只需添加一个日期时间字段并将默认值设置为 GETDATE()

ALTER TABLE acct
ADD CreateDate datetime DEFAULT GETDATE()

现在您可以在 CreateDate 上订购

查看此 post 了解更多信息 SQL Server default date time stamp?

编辑:根据下面的评论,您可以通过触发器执行此操作(更多信息:https://msdn.microsoft.com/en-us/library/ms189799.aspx

CREATE TRIGGER [dbo].[AcctInsert]
ON [dbo].[Acct]
FOR INSERT
AS
BEGIN
    SET NOCOUNT ON

    UPDATE Acct 
    SET CreateDate = GETDATE()
    WHERE acctId in (
        select 
            acctId
        FROM Inserted
    )

END