提一个高级点的问题大家来讨论
有这样的一个表
CREATE TABLE [dbo].[TABLE1] (
[ID] [uniqueidentifier] NOT NULL ,
[number] [int] IDENTITY (1, 1) NOT NULL ,
[流程1] [datetime] NOT NULL ,
[流程2] [datetime] NOT NULL ,
[流程3] [datetime] NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[TABLE1] WITH NOCHECK ADD
CONSTRAINT [PK__TABLE1__23BE4960] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[TABLE1] ADD
CONSTRAINT [DF_TABLE1_ID] DEFAULT (newid()) FOR [ID],
CONSTRAINT [DF_TABLE1_流程1] DEFAULT (getdate()) FOR [流程1],
CONSTRAINT [DF_TABLE1_流程2] DEFAULT (getdate()) FOR [流程2],
CONSTRAINT [DF__TABLE1__流程3__25A691D2] DEFAULT (getdate()) FOR [流程3],
CONSTRAINT [UQ__TABLE1__24B26D99] UNIQUE NONCLUSTERED
(
[number]
) ON [PRIMARY]
GO
可以看到[number] [int] IDENTITY (1, 1)是自动编号的
有这样的一个存储过程
ALTER PROCEDURE dbo.StoredProcedure1
AS
BEGIN TRANSACTION
INSERT INTO TABLE1
(流程1)
VALUES ('2005-1-2')
if(@@ERROR=0)
begin
COMMIT TRANSACTION
end
else
begin
ROLLBACK TRANSACTION
end
RETURN @@ERROR
现在我们执行存储过程...一切都很好,数据都增加..[number]编号也是连续的...
现在我们去掉[ID]的默认值newid()保存表 然后在执行存储过程....(模拟实际应用中会发生的不可预知的错误)
当然会报错误...
然后我们在添加[ID]的默认值newid()保存表.....
OK..我们继续执行存储过程,这次不会报错了
奇怪的事情发生了......[number]编号不连续了...
我不知道发生了什么...但是我使用了事务...这个事务没有达到我希望的目的..在任何情况下保持编号连续
因此在一些应用中使用IDENTITY会发生问题....
难道我一定要使用缓慢的MAX(number)吗?
还是我的写法有问题?
请各位指点...谢谢