ВСТАВКА нескольких строк - PullRequest
0 голосов
/ 18 января 2010

У меня есть следующий код SQL. Гарантируется ли, что MyTable будет отсортирован по MyTable.data? По сути, вопрос заключается в следующем: если я вставляю несколько строк одним оператором INSERT, может ли другое соединение попасть в середину вставки и вставить что-то еще между строк?

CREATE TABLE MyTable(
    id bigint IDENTITY(1,1) NOT NULL,
    data uniqueidentifier NOT NULL,
        CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED (id ASC)
)

DECLARE @data uniqueidentifier
SET @data = NEWID()

WITH Dummy AS
(
    SELECT @data as data, 1 as n
    UNION ALL
    SELECT @data, n + 1
    FROM Dummy
    WHERE n < 100
)
INSERT INTO MyTable(data)
    SELECT data FROM Dummy

Спасибо.

Ответы [ 3 ]

2 голосов
/ 18 января 2010

По определению, таблицы SQL не имеют определенного порядка. Но я не думаю, что это то, что вы спрашиваете. Я думаю, что вы спрашиваете, может ли другой процесс вставить строку между одной из ваших вставок. Ответ - да, если у вас не заблокирована вся таблица, что вы, вероятно, не хотите делать по причинам параллелизма.

2 голосов
/ 18 января 2010

Простите, если я неправильно понимаю ваш вопрос. Но вы никогда не должны зависеть от первичных ключей для заказа данных, если это то, что вы ищете. Это не то, для чего нужны первичные ключи. Упорядочение данных должно выполняться с помощью предложения ORDER BY или столбцов, специально введенных вами для отслеживания порядка. Столбцы первичного ключа предназначены для идентификации данных, а не для упорядочения.

1 голос
/ 18 января 2010

У вас нет гарантии, что эти строки будут вставлены последовательно - если вы не переведете базу данных SQL Server в однопользовательский режим и не убедитесь, что никто другой не подключен.

Но вопрос в том, почему этодаже важно для тебя ??В SQL Server вы никогда не должны полагаться на «заданный системой» порядок - если вам нужен порядок, используйте явный ORDER BY - это единственный надежный способ упорядочить ваши строки в любом случае.

...