有时身份不起作用

时间:2009-12-14 12:24:27

标签: sql sql-server

我有一张下表

CREATE TABLE [dbo].[test_table]
(
 [ShoppingCartID] [int] IDENTITY(1,1) NOT NULL,
 [CartTimeoutInMinutes] [int] NOT NULL,
 [MaximumOrderLimitPerUser] [int] NOT NULL,
 [MaximumOrderLimitPerSession] [int] NOT NULL,
 CONSTRAINT [PK_test_table] PRIMARY KEY CLUSTERED
(
 [ShoppingCartID] 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

有时身份不起作用,它从0开始,有时以1开头。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

你如何将数据放在那里?如果您使用常规INSERT,则应从1开始。但是,您可以批量插入表中,或以其他方式使用identity-insert;在这种情况下,所有赌注都已关闭:

create table test (
  id int not null identity(1,1), 
  name varchar(20) not null)
set identity_insert test on
insert test (id, name) values (0, 'abc')
insert test (id, name) values (27, 'def')
set identity_insert test off
select * from test

带输出:

id          name
----------- --------------------
0           abc
27          def

或者是与@@IDENTITY相关的问题(在这种情况下:改为使用SCOPE_IDENTITY())。

答案 1 :(得分:0)

可能的

您使用的是DBCC CHECKIDENT吗?这是由一些数据比较工具(例如Red Gate)调用的,具有以下行为:

  

DBCC CHECKIDENT(table_name,RESEED,new_reseed_value)

     

当前标识值设置为new_reseed_value

     

如果自创建表后没有向表中插入行,或者如果使用TRUNCATE TABLE语句删除了所有行,则在运行DBCC CHECKIDENT后插入的第一行使用new_reseed_value作为标识。否则,插入的下一行使用new_reseed_value +当前增量值。

或者:您使用的是SET IDENTITY_INSERT吗?

这些假设您正在查看表格,而不是使用@@ IDENTITY(如Mark建议的那样)