2013-03-09 69 views
0

我的一個表中包含一個自動編號費爾德ShiftPk,使用該表的主鍵哪個(IAM),但是當我插入的值的記錄生成主鍵是不按順序的Autonumbers不按順序產生

我知道自動編號neednot總是順序,但我所有的其他汽車號碼按順序工作請在下面找到我的劇本和建議如有問題是從我的一部分

****** Object: Table [dbo].[ShiftMasterNew_tbl] Script Date: 03/09/2013 13:21:13 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[ShiftMasterNew_tbl](
    [ShiftPK] [numeric](18, 0) IDENTITY(1,1) NOT NULL, 
    [ShiftName] [varchar](50) NOT NULL, 
    [Duration] [numeric](18, 0) NULL, 
CONSTRAINT [PK_ShiftMasterNew_tbl] PRIMARY KEY CLUSTERED 
(
    [ShiftPK] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], 
CONSTRAINT [IX_ShiftMasterNew_tbl] UNIQUE NONCLUSTERED 
(
    [ShiftName] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

SET ANSI_PADDING OFF 
GO 

就是使別人

+9

'IDENTITY'產生**連續數字** - 下一個總是比前一個大電子 - 但它使**不能保證**這些數字之間沒有任何差距。可能存在差距 - 那又如何?數字確實在不斷增加 - 其他任何事情都不相關是很重要的。 – 2013-03-09 09:38:52

+3

那麼增量設置爲'1',因此它們應該按順序生成。你看到的差距可能是由於失敗(回滾)插入或刪除的行。在2012年,[服務器重新啓動後]也可能出現缺口(https://connect.microsoft.com/SQLServer/feedback/details/739013/alwayson-failover-results-in-reseed-of-identity)爲什麼這很重要?你不能依賴'IDENTITY'值是連續的。 – 2013-03-09 09:38:56

+0

http://weblogs.sqlteam.com/peterl/archive/2009/03/10/How-to-efficiently-reuse-gaps-in-identity-column.aspx – Arshad 2013-03-09 09:45:32

回答

0

我想我發現..Any失敗嘗試插入也消耗一個標識符

例如,如果我插入,然後有一個插入失敗

那麼問題如果我插入其標識符是

0

如何不同,這TABEL自動編號一世是插入到表中的數據?我想,如果你有你的身份列的差距因此,例如,它看起來像下面這樣:

1 
2 
5 
6 
8 
9 
10 
15 

...這可能是當數據被插入到表中的東西是誤入歧途的症狀。您是否可以在更新過程中向您的OP添加更多信息?

正如評論所說 - 它一定會是SEQUENTIAL但可能會有差距。如果你需要向自己證明他們是連續的,你可以添加一個DateTime字段,比如「WhenUpdated」?