83 votes

Déplacer des données SQL d'une table à une autre

Je me demandais s'il était possible de déplacer toutes les lignes de données d'une table à l'autre, qui correspondent à une certaine requête ?

Par exemple, j'ai besoin de déplacer toutes les lignes de table de Table1 vers Table2 où leur nom d'utilisateur = 'X' et leur mot de passe = 'X', afin qu'elles n'apparaissent plus dans Table1.

J'utilise SQL Server 2008 Management Studio.

5voto

workmad3 Points 12974

Vous devriez pouvoir le faire avec une sous-requête dans l'instruction INSERT.

INSERT INTO table1(column1, column2) SELECT column1, column2 FROM table2 WHERE ...;

suivi de la suppression de la table1.

N'oubliez pas de l'exécuter en tant que transaction unique afin de pouvoir annuler toute l'opération en cas de problème.

5voto

Utilisez cette seule déclaration sql qui est sûre et ne nécessite pas de commit/rollback avec plusieurs déclarations.

INSERT Table2 (
      username,password
) SELECT username,password
      FROM    (
           DELETE Table1
           OUTPUT
                   DELETED.username,
                   DELETED.password
           WHERE username = 'X' and password = 'X'
      ) AS RowsToMove ;

Travaille sur le serveur SQL et effectue les changements appropriés pour MySql.

4voto

astander Points 83138

Essayez ceci

INSERT INTO TABLE2 (Cols...) SELECT Cols... FROM TABLE1 WHERE Criteria

Puis

DELETE FROM TABLE1 WHERE Criteria

2voto

seanxe Points 968

Vous pouvez essayer ceci :

SELECT * INTO tbl_NewTableName 
FROM tbl_OldTableName
WHERE Condition1=@Condition1Value

Ensuite, exécutez une simple suppression :

DELETE FROM tbl_OldTableName
WHERE Condition1=@Condition1Value

2voto

abdkok Points 103

Vous pouvez utiliser "Partitionnement logique" pour passer des données d'une table à l'autre :

En mettant à jour la colonne de partition, les données seront automatiquement déplacées vers l'autre table :

voici l'échantillon :

CREATE TABLE TBL_Part1
(id  INT NOT NULL,
 val VARCHAR(10) NULL,
 PartitionColumn  VARCHAR(10) CONSTRAINT CK_Part1 CHECK(PartitionColumn = 'TBL_Part1'),
 CONSTRAINT TBL_Part1_PK PRIMARY KEY(PartitionColumn, id)
);

CREATE TABLE TBL_Part2
(id  INT NOT NULL,
 val VARCHAR(10) NULL,
 PartitionColumn  VARCHAR(10) CONSTRAINT CK_Part2 CHECK(PartitionColumn = 'TBL_Part2'),
 CONSTRAINT TBL_Part2_PK  PRIMARY KEY(PartitionColumn, id)
);

GO

CREATE VIEW TBL(id, val, PartitionColumn)
WITH SCHEMABINDING
AS
     SELECT id, val, PartitionColumn FROM dbo.TBL_Part1
     UNION ALL  
     SELECT id, val, PartitionColumn FROM dbo.TBL_Part2;

GO

--Insert sample to TBL ( will be inserted to Part1 )
INSERT INTO TBL
VALUES(1, 'rec1', 'TBL_Part1');

INSERT INTO TBL
VALUES(2, 'rec2', 'TBL_Part1');

GO

--Query sub table to verify
SELECT * FROM TBL_Part1

GO
--move the data to table TBL_Part2 by Logical Partition switching technique
UPDATE TBL
  SET
      PartitionColumn = 'TBL_Part2';

GO

--Query sub table to verify
SELECT * FROM TBL_Part2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X