我是SQL Server的新手,我使用过MySQL (基础开发)。现在,我想在我的SQL Server中创建一个表,它根据行的添加和删除来执行自动递增/递减。
为了创建一个表,我找到了这个。例如,我创建了我的数据库,但它并没有那么好地工作。
CREATE TABLE Persons
(
ID int IDENTITY(1,1) PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
当我删除任何行时,我的ID仍然应该从2-1 or 6-5 or 7-6
中递减,有时它会从7-9 or 6-9
中自动递增。而且它也不能完美地工作。
那么,谁能告诉我如何解决这个问题,我已经尝试了将近24个小时,直到现在都没有结果。
请帮我解决这个问题。
发布于 2014-02-18 16:52:04
性能会很糟糕--而且会有触发器。1行删除可以转变为1亿行更新,随后是10亿行级联更新。这是一个可怕的设计。
这就是为什么没有数据库支持它(包括MySQL)。
该ID在用完时会被起诉,并且主键永远不应因一时兴起而更改。想象一下,你有一百万行,然后删除ro2 nr 2--也就是999997次更新,然后更新所有在外键约束中使用该行的行。
发布于 2014-02-18 16:48:10
据我所知,SQL Server没有在删除某些行后自动更新标识列的机制。我认为这种类型的机制也会使性能变得更差,因此不会执行这种类型的任务。
出现在我脑海中的第一个简单任务是trigger,它监听行的删除。一旦进行了删除,触发器将相应地更新标识列。但是,您必须了解SQL Server实例的性能将非常糟糕,例如,考虑到100万行的更新。
发布于 2014-02-18 17:05:35
属性会在删除行时导致列值出现间隙。即使正在进行插入并且插入失败,标识列值也会递增,并且不会回滚。
如果你真的想要连续的值,你应该管理一个包含当前最大值的单独的表,并在插入和删除行时更新它。
您可以创建一个存储过程来实现自定义排序逻辑,在该逻辑中,包含单行和单列的表将根据传递给存储过程的参数进行更新,该参数指示插入正在进行还是正在删除。See here for more
https://stackoverflow.com/questions/21848188
复制相似问题