我有一个表,其中手工输入了许多记录。通过导航,需要能够按照它们被添加的顺序进行排序。到目前为止,我有一个名为ID的递增标识列,它是一个主键。但由于它是主键,列不能复制,我得到错误"字段'ID'不能修改"每次我尝试输入一个新的记录。我是否可以拥有另一种可以增加和复制的数据类型?如果其中一些具有相同的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)
都没有运气。我怎样才能完成我想做的事情?
如果您想确保您可以按照添加的顺序对它们进行排序,只需添加一个日期时间字段并使默认值为GETDATE()
ALTER TABLE acct
ADD CreateDate datetime DEFAULT GETDATE()
现在你可以在CreateDate
下订单了关于SQL Server默认日期时间戳的更多信息编辑:根据下面的评论,这是你如何通过一个触发器来做到这一点(更多信息: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
与其按照特定的顺序插入它们,不如考虑使用select语句以特定的顺序使用它们。添加表中行的顺序对您想要做的事情影响不大。您的标识ID列可以告诉您它们的添加顺序,例如:
Select ID
FROM accnt
ORDER BY ID ASC
Select ID
FROM accnt
ORDER BY ID DESC