Нужно портировать данные в дочернюю таблицу 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
)
Другие вопросы по тегам