Скопируйте строки из одной таблицы и обновите столбец идентификатора
У меня есть следующая таблица
![alt text]()
Я вставил продукт B в него, и он дает мне идентификатор 15
Тогда у меня есть таблица определения, которая выглядит следующим образом.
![alt text]()
Я хочу выбрать строки ProductDefinition, где ProdID = 14, и реплицировать их и вставить в ProdID = 15, как показано ниже.
![alt text]()
Как это сделать с помощью SQL-кода?
Ответы
Ответ 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`