Нужно портировать данные в дочернюю таблицу sql
Нужно портировать данные в таблицу sql
У меня есть главная таблица с колонками (masterid, masterdata, year
). Вот masterid
это столбец идентичности.
У меня есть данные за 2012 год. Мне нужны те же данные за 2012 год за 2013 год
Я мог бы решить эту проблему, просто запустив оператор SQL, например:
INSERT INTO mastertable
SELECT masterdata, 2013
FROM mastertable WHERE Year = 2012
Я хотел бы запустить подобный вид запуска для дочернего стола также.
Моя структура дочерней таблицы: (childid , masterid, childdata
)
Здесь у меня есть данные о детях за 2012 год, я хочу иметь аналогичные данные за 2013 год с надлежащими masterid
Первый шаг создан для основных данных за 2013 год.
Желательно, чтобы у меня было решение без добавления дополнительных временных столбцов.
Любое руководство высоко ценится.
С уважением, Кумар.
2 ответа
Вам нужно будет сохранить ссылки между записями 2013 и 2012 годов, созданными в mastertable
Таблица. Если вы хотите добиться этого без добавления дополнительных временных столбцов, вам нужно использовать T-SQL.
(Я угадал тип varchar(max)
для masterdata, поскольку вы не указали его тип).
DECLARE @links TABLE ( masterid int, newmasterid int )
DECLARE @mastertemp TABLE ( masterid int, masterdata varchar(max) )
DECLARE @masterid int,
@masterdata varchar(max)
INSERT INTO @mastertemp
SELECT masterid,
masterdata
FROM mastertable
WHERE [year] = 2012
WHILE EXISTS ( SELECT TOP 1 * FROM @mastertemp )
BEGIN
SELECT TOP 1 @masterid = masterid,
@masterdata = masterdata
FROM @mastertemp
INSERT INTO mastertable
VALUES ( @masterdata, 2013 )
INSERT INTO @links
VALUES ( @masterid, SCOPE_IDENTITY() )
DELETE FROM @mastertemp
WHERE masterid = @masterid
END
INSERT INTO childtable
SELECT l.newmasterid,
c.childdata
FROM childtable c
INNER JOIN @links l ON c.masterid = l.masterid
Предположим, ChildId
это столбец с автоматическим приращением
Вы можете обернуть их в функцию / хранимую процедуру без необходимости временной таблицы.
ОБНОВЛЕНО
Declare @Year int
SET @Year = 2011
INSERT INTO MasterTable
SELECT masterdata, 2013
FROM mastertable WHERE Year = @Year
INSERT INTO childtable
SELECT SCOPE_IDENTITY(), c.childdata
FROM childtable c
WHERE masterid in
(
SELECT masterid
FROM masterTable
WHERE Year = @Year
)