Domanda

So che il titolo può sembrare strano, ma questo è quello che voglio fare:

    .
  1. Ho la tabella con molti record.
  2. Voglio ottenere alcuni di questi record e inserirli in un'altra tabella.Qualcosa del genere:

    INSERT INTO TableNew SELECT * FROM TableOld WHERE ...

  3. La parte difficile è che voglio che queste righe che ho inserito per essere cancellato formano anche la tabella di origine.

    C'è un modo semplice per farlo, perché l'unico pensiero di essere riuscito a fare è usare una tabella temporanea per salvare i record selezionati e quindi metterli nella seconda tabella e cancella le righe che corrispondono a loro dala prima tabella.È una soluzione, ma con così tanti record (oltre 3 milioni e metà) Sto cercando qualche altra idea ...

È stato utile?

Soluzione

In 2005+ Utilizzare la clausola OUTPUT come questa:

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

verrà eseguito in singola transazione e completato o roll indietro simultaneamente

Altri suggerimenti

È possibile utilizzare Inserisci ... Uscita clausola per memorizzareL'ID delle righe copiate in una tabella temporanea.Quindi è possibile eliminare le righe dalla tabella originale in base alla tabella temporanea.

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
.

Esempio di funzionamento a Data Explorer.

Dovresti fare qualcosa del genere:

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

DELETE FROM "table1"
WHERE ...
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top