Вопрос

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

  1. У меня есть таблица со многими записями.
  2. Я хочу получить некоторые из этих записей и вставлять их в другой стол.Что-то вроде этого:

    INSERT INTO TableNew SELECT * FROM TableOld WHERE ...

  3. Тященая часть - это то, что я хочу, чтобы это строки, которые я вставил, чтобы быть удалены, образуют таблицу происхождения.

    Есть ли просто простой способ сделать это, потому что единственное подумайте, что мне удалось сделать, это использовать временную таблицу для сохранения выбранных записей, а затем, чтобы поставить их во вторую таблицу и удалить строки, которые совпадают с нимиПервый стол.Это решение, но с таким количеством записей (более 3 миллионов и половины) я ищу какой-то другой идею ...

Это было полезно?

Решение

в 2005+ Используйте предложение OUTPUT, как это:

DELETE FROM TableOld 
OUTPUT DELETED.* INTO TableNew
WHERE YourCondition
.

Это будет выполнено в одной транзакции и заполнено, либо откатывается одновременно

Другие советы

Вы можете использовать Вставьте ... Вывод Пункт для храненияИдентификатор скопированных рядов во временной таблице.Затем вы можете удалить строки из оригинальной таблицы на основе временной таблицы.

declare @Table1 table (id int, name varchar(50))
declare @Table2 table (id int, name varchar(50))

insert @Table1 (id,name)
          select 1, 'Mitt'
union all select 2, 'Newt'
union all select 3, 'Rick'
union all select 4, 'Ron'


declare @copied table (id int)

insert  @Table2
        (id, name)
output  inserted.id 
into    @copied
select  id
,       name
from    @Table1
where   name <> 'Mitt'

delete  @Table1
where   id in 
        (
        select  id 
        from    @copied
        )

select  *
from    @Table1
.

Рабочий пример при проведении данных.

Вы должны сделать что-то подобное:

INSERT INTO "table1" ("column1", "column2", ...)
SELECT "column3", "column4", ...
FROM "table2" 
WHERE ...

DELETE FROM "table1"
WHERE ...
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top