Sql server SQL Server,删除一个或多个记录后未在正确位置插入记录

Sql server SQL Server,删除一个或多个记录后未在正确位置插入记录,sql-server,database,sql-server-2008,stored-procedures,Sql Server,Database,Sql Server 2008,Stored Procedures,我知道,这是一个非常基本的问题,但我正在重新学习sql存储过程,这就是发生的事情: 当遇到以下情况时,我正在练习一些简单的删除/插入例程: 如果我只插入记录: 1.狗 2.cat 3.霸王龙 4.骆驼 一切正常,然后我调用一个delete过程,传递columu_ID来标识记录并将其删除 这是正确的,一切正常 然后我再次调用一个插入过程,插入过程如下所示: 1.狗 2.cat 5.蛇**现在这是错误的,对吗?*** 4.骆驼 如果我删除了记录2和3,并调用了插入过程来插入2条新记录,ir将“填充”

我知道,这是一个非常基本的问题,但我正在重新学习sql存储过程,这就是发生的事情:

当遇到以下情况时,我正在练习一些简单的删除/插入例程: 如果我只插入记录:

1.狗

2.cat

3.霸王龙

4.骆驼

一切正常,然后我调用一个delete过程,传递columu_ID来标识记录并将其删除

这是正确的,一切正常

然后我再次调用一个插入过程,插入过程如下所示:

1.狗

2.cat

5.蛇**现在这是错误的,对吗?***

4.骆驼

如果我删除了记录2和3,并调用了插入过程来插入2条新记录,ir将“填充”这些位置,第三条记录将在底部,应该在那里

存储过程非常基本: 插入

删除

USE [Test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[DeleteData]

    @id_record int
AS
BEGIN

    SET NOCOUNT ON;

    delete from dbo.names where id_record = @id_record
    SELECT * from dbo.names
END

因此,导致这种行为的原因是,该表非常基本,但符合Pkeys,而不是null、索引等。

从select语句返回行的顺序是任意的,除非使用“order by”子句


实际上,顺序将由DBMS使用的特定实现决定,但您不应假定顺序是稳定的。

如何填充
id\u记录?这不是身份,否则号码就不会重置;在属性“标识规范”列中,(is标识)设置为“是”。非常奇怪,当使用identity时,它将跳过beofre和deleted使用的值,甚至是从回滚的插入中删除的值。永远不要假设标识不会有跳过的值。
USE [Test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[DeleteData]

    @id_record int
AS
BEGIN

    SET NOCOUNT ON;

    delete from dbo.names where id_record = @id_record
    SELECT * from dbo.names
END