J'ai le tableau suivant
J'ai inséré le produit B et cela me donne un identifiant de 15
Ensuite, j'ai la table de définition qui est comme suit.
Je veux sélectionner les lignes ProductDefinition où ProdID = 14 et répliquer les mêmes et l'insérer pour ProdID = 15 comme suit
Comment y parvenir en utilisant du code SQL?
INSERT INTO ProuctDefinition (ProdID, Definition, Desc)
SELECT
xxx, Definition, Desc
FROM
ProductDefinition
WHERE
ProdID = yyy
xxx
est votre nouveau ProdID et le yyy
est votre ancien. Cela suppose également que DefID
est automatiquement renseigné sur INSERT
.
Cela fonctionnera avec n'importe quelle colonne de votre choix. Pas seulement clé primaire/ID.
INSERT INTO TableName (Column1, CustomID, Column3, Column4, Column5)
SELECT Column1, 'NewValue', Column3, Column4, Column5 FROM TableName
WHERE CustomID='OrigValue'
Peut utiliser MERGE
sur SQL Server 2008, présente l'avantage d'utiliser OUTPUT
pour renvoyer les valeurs DefID
, en supposant qu'elles sont générées automatiquement, par exemple
MERGE INTO ProductDefinition
USING (
SELECT 16, P1.Definition, P1.Description
FROM ProductDefinition AS P1
WHERE P1.ProdID = 15
) AS source (ProdID, Definition, Description)
ON 0 = 1
WHEN NOT MATCHED THEN
INSERT (ProdID, Definition, Description)
VALUES (ProdID, Definition, Description)
OUTPUT inserted.DefID, inserted.ProdID,
inserted.Definition, inserted.Description;
si vous voulez sélectionner tous les éléments (dans l'état la table ne contient aucune clé primaire)
INSERT INTO [tabelName]
SELECT * FROM [tabelName]
WHERE (YourCondition)
si la table contient une clé primaire, sélectionnez uniquement les colonnes qui ne sont pas une clé primaire.
INSERT INTO [tabelName]
SELECT col_1,col_2,col_n FROM [tabelName]
WHERE (YourCondition)
Si vous souhaitez répliquer des données dans la même table, utilisez cette logique:
tout d'abord, insérez la déclaration à l'endroit où vous souhaitez insérer ...
insert into [table](column1,column2)
deuxièmement, sélectionnez la commande à partir de laquelle vous souhaitez extraire des données ....
select (column1/'your value',column2/'your value') from [table]
maintenant définir le filtre quelles lignes vous souhaitez dupliquer
where (your condition)
en tant que veulent reproduire les mêmes données pour différents clients, j'ai utilisé cette requête.
Si votre identifiant n'est pas auto-incrémenté ou séquence déclarée et si vous ne voulez pas créer de table temporaire:
vous pouvez utiliser:
INSERT INTO Tabel1 SELECT ((ROW_NUMBER( ) OVER ( ORDER BY ID )) + (SELECT MAX(id) FROM Table1)) ,column2,coulmn3,'NewValue' FROM Tabel1 Where somecolumn='your value`