Удалить данные из вставленной строки - PullRequest
0 голосов
/ 10 апреля 2019

Я вставлял массовые данные из Excel в SQL, используя созданный мной пакет массовой вставки. При последовательной вставке данных я пропустил файл, который нужно было вставить, поэтому остановил пакет посередине. Однако пакет уже добавил около 2500 строк, я удалил эти строки с помощью «delete top (2500) from coulmn_name» и продолжил вставку данных. Теперь я боюсь, если я действительно удалил последние добавленные записи или некоторые случайные данные. Может ли кто-нибудь помочь мне понять это?

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

Вам понадобится другой способ определения строк, которые нужно удалить, например, наличие BatchID или чего-то еще. Люди обычно используют для этого промежуточную таблицу, чтобы крупные массовые операции не мешали нормальному использованию, а также, чтобы, когда дела пошли на юг, вы могли просто усечь и начать все сначала.

Чтобы показать, что TOP не заботится о «последнем»:

CREATE TABLE #foo(id int IDENTITY(1,1) PRIMARY KEY, name sysname);
INSERT #foo(name) VALUES('Bob');
INSERT #foo(name) VALUES('Frank');
INSERT #foo(name) VALUES('Aaron');
INSERT #foo(name) VALUES('William');
INSERT #foo(name) VALUES('Mary');

DELETE TOP (2) FROM #foo;

SELECT * FROM #foo;

DROP TABLE #foo;

Результаты:

id  name
--  -------
3   Aaron
4   William
5   Mary

Это удаляло первых двух, которые были вставлены (и просто случайно были назначены целочисленные значения). Теперь попробуйте это:

CREATE TABLE #foo(id int PRIMARY KEY, name sysname);
INSERT #foo(id,name) VALUES(3,'Bob');
INSERT #foo(id,name) VALUES(12,'Frank');
INSERT #foo(id,name) VALUES(84,'Aaron');
INSERT #foo(id,name) VALUES(16,'William');
INSERT #foo(id,name) VALUES(7,'Mary');

DELETE TOP (2) FROM #foo;

SELECT * FROM #foo;

DROP TABLE #foo;

Результаты:

id  name
--  -------
12  Frank
16  William
84  Aaron

Различные строки были удалены. Теперь измените CREATE на:

CREATE TABLE #foo(id int, name sysname UNIQUE);

Та же вставка + удаление выходов:

id  name
--  -------
84  Aaron
16  William
7   Mary

Стол не заказан. TOP без ORDER BY (фактически любой запрос без ORDER BY) следует считать произвольным (возможно, даже полезно думать о нем как о случайном).

0 голосов
/ 10 апреля 2019

Вы удалили случайные данные, потому что строки возвращаются в порядке чтения. Например, если вы выполняете один и тот же оператор "select top 5" 5-10 раз, тогда нет никаких гарантий, что вы получите тот же набор данных, потому что некоторые страницы или строки могут быть заблокированы.

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