Подтвердить что ты не робот

Скопируйте строки из одной таблицы и обновите столбец идентификатора

У меня есть следующая таблица

alt text

Я вставил продукт B в него, и он дает мне идентификатор 15

Тогда у меня есть таблица определения, которая выглядит следующим образом.

alt text

Я хочу выбрать строки ProductDefinition, где ProdID = 14, и реплицировать их и вставить в ProdID = 15, как показано ниже.

alt text

Как это сделать с помощью SQL-кода?

4b9b3361

Ответ 1

INSERT INTO ProuctDefinition (ProdID, Definition, Desc)
SELECT
  xxx, Definition, Desc
FROM
  ProductDefinition
WHERE
  ProdID = yyy

xxx - ваш новый ProdID, а yyy - ваш старый. Это также предполагает, что DefID автоматически заполняется на INSERT.

Ответ 2

Это будет работать с любым выбранным столбцом. Не только первичный ключ/идентификатор.

INSERT INTO TableName (Column1, CustomID, Column3, Column4, Column5)
SELECT Column1, 'NewValue', Column3, Column4, Column5 FROM TableName
WHERE CustomID='OrigValue'

Ответ 3

Можно использовать MERGE на SQL Server 2008, имеет преимущество использования OUTPUT для возврата значений DefID, если они автоматически генерируются, например.

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;

Ответ 4

если вы хотите выбрать все элементы (в условии, что таблица не содержит первичных ключей)

INSERT INTO [tabelName]
SELECT  * FROM    [tabelName]
WHERE  (YourCondition)

в условии, что таблица содержит первичные ключи, выберите только столбцы, которые не являются первичным ключом Like:

INSERT INTO [tabelName]
SELECT  col_1,col_2,col_n FROM    [tabelName]
WHERE  (YourCondition)

Ответ 5

Если вы хотите реплицировать данные в одной таблице, используйте эту логику:

сначала вставьте statment, куда вы хотите вставить...

insert into [table](column1,column2)

second, выберите статус, из которого вы хотите взять данные для вставки....

select (column1/'your value',column2/'your value') from [table]

теперь установите фильтр, какие строки вы хотите дублировать

where (your condition)

как хотите реплицировать те же данные для разных клиентов, я использовал этот запрос.

Ответ 6

Если ваш идентификатор не является автоинкрементной или объявленной последовательностью, и если вы не хотите создавать временную таблицу:

вы можете использовать:

INSERT INTO Tabel1 SELECT ((ROW_NUMBER( ) OVER ( ORDER BY ID  )) + (SELECT  MAX(id) FROM Table1)) ,column2,coulmn3,'NewValue' FROM Tabel1 Where somecolumn='your value`