SQL Server, не вставляя записи в правильное положение после удаления одной или нескольких записей - PullRequest
2 голосов
/ 04 августа 2010

Я знаю, это очень простой вопрос, но я нахожусь в процессе переучивания хранимых процедур sql, и вот что произошло:

Я практиковался с некоторыми простыми процедурами удаления / вставки, когдасталкивался с этим: если я ТОЛЬКО вставляю записи:

все в порядке, затем я вызываю процедуру удаления, передавая colum_ID, чтобы идентифицировать запись и удалить ее.

Это сделано правильно, и все в порядке

Затем я вызываю процедуру вставки еще раз, и вставка происходит следующим образом:

И я удаляю, скажемзаписи 2 и 3, и вызовите процедуру вставки для 2 новых записей, ir "заполнит" эти позиции, и третья запись будет внизу, где она должна быть.

Хранимые процедуры очень простые: Вставить

USE [Test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[InsertData]
@name varchar(50),
@lastname varchar(50)
AS
BEGIN
    SET NOCOUNT ON;
    insert into dbo.names (name,last_name)
    values(@name,@lastname)
    select * from dbo.names
END

Удалить

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, а не с нулями, индексами и т. Д.

1 Ответ

5 голосов
/ 04 августа 2010

Порядок, в котором строки возвращаются из оператора select, является произвольным, если только вы не используете предложение 'order by'.

На практике порядок будет определяться конкретной реализацией, используемой вашей СУБД, но вы не должны предполагать, что порядок стабилен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...