哈哈,这个我知道啊,感觉Sql Server 应该有解决的方法,或许我们没发现,或许真的是Sql Server 设计上的疏忽, 你试想一下,当你想数据库插入1000条记录,再删除这1000条记录,再插入1条记录,这时id为:1001,可只有一条数据,怎么感觉怪怪的…… 而且这是一种相对好的情况,试想一下: 插入id: 1 2 45 删除最后一条记录: 1 2 插入一条记录: 1 2 46 是不是很恶心呢
可以的 CREATE TABLE dbo.Test( ID INT IDENTITY NOT NULL PRIMARY KEY, Name VARCHAR(40) NOT NULL ) GOINSERT INTO dbo.Test(Name) VALUES ('AA') INSERT INTO dbo.Test(Name) VALUES ('BB') INSERT INTO dbo.Test(Name) VALUES ('CC') INSERT INTO dbo.Test(Name) VALUES ('DD') GO --将BB删除,那么剩下1,3,4 DELETE dbo.Tool WHERE Name = 'BB' GO--将IDENTITY_INSERT设为ON,那么可以插入你想插入的值 SET IDENTITY_INSERT dbo.Tool ON GO--又回到1,2,3,4了 INSERT INTO dbo.Tool (ID, Name) VALUES (2, 'BB') GO
,如果删除中间记录,就写个触发器,循环修改删除记录以下所有ID,但是,如上所说,这有意义,性能的损失!!!
不过还可以有很多办法解决的
如果只为了前台显示的时候好看的话,那就没必要了按数据插入时间order一下,然后自动生成一个id列显示出来把数据库里的那个id列隐藏掉就行了
你试想一下,当你想数据库插入1000条记录,再删除这1000条记录,再插入1条记录,这时id为:1001,可只有一条数据,怎么感觉怪怪的……
而且这是一种相对好的情况,试想一下:
插入id:
1
2
45
删除最后一条记录:
1
2
插入一条记录:
1
2
46
是不是很恶心呢
CREATE TABLE dbo.Test(
ID INT IDENTITY NOT NULL PRIMARY KEY,
Name VARCHAR(40) NOT NULL
)
GOINSERT INTO dbo.Test(Name) VALUES ('AA')
INSERT INTO dbo.Test(Name) VALUES ('BB')
INSERT INTO dbo.Test(Name) VALUES ('CC')
INSERT INTO dbo.Test(Name) VALUES ('DD')
GO
--将BB删除,那么剩下1,3,4
DELETE dbo.Tool
WHERE Name = 'BB'
GO--将IDENTITY_INSERT设为ON,那么可以插入你想插入的值
SET IDENTITY_INSERT dbo.Tool ON
GO--又回到1,2,3,4了
INSERT INTO dbo.Tool (ID, Name) VALUES (2, 'BB')
GO
还有14楼说的,sqlserver设计上的失误??????
你都想的到,难道微软想不到???
如果是这样的话,不是相当于你知道要插入第几条数据吗?如果是很多不连续的id,你难道要一个一个的指定id的值吗?
不是我钻牛角尖,只是如果序号不连续的话,数据看起来很不整洁,很乱,应为我所做的软件要频繁的对数据进行操作,这样看起来很不雅观,我可能有点太追求完美了,不知道有没有好办法?
1
2
3
当删了id为:2的记录后就不能再插入id为:2的记录了吗?
可以这样理解吗?请多指教!
2
3
当删了id为:2的记录后就不能再插入id为:2的记录了吗?
------------
假如有另一个或多个表以外键关联这个id(这种情况是非常普遍的,很少有不与其他表关联的表存在)...例如你这个id为2的记录是一个商品A,关联的表是出入库记录...当你删除商品A再插入id为2的记录商品B,你的出入库记录可想而知把原来商品A的记录全都算到商品B的头上,用户不跟你发飙才怪...
去SQL区问问。