0

需要在sql表中移植数据

我有一个带有列 ( masterid, masterdata, year) 的主表。这masterid是一个身份列。

我有 2012 年的数据。我需要与 2013 年相同的 2012 年数据

我可以通过简单地运行如下 SQL 语句来解决问题:

INSERT INTO mastertable
    SELECT masterdata, 2013 
    FROM mastertable WHERE Year = 2012

我也想为子表运行类似的运行。

我的子表结构是:(childid , masterid, childdata

这里我有 2012 年的子数据,我想masterid在第一步中为 2013 年的主数据正确创建 2013 年的类似数据。

最好我想在不添加额外临时列的情况下获得解决方案

任何铅都非常感谢。

问候,库马尔。

4

2 回答 2

0

假设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
)
于 2012-05-02T12:48:49.527 回答
0

您需要存储mastertable表中创建的 2013 年和 2012 年记录之间的链接。如果您想在不添加任何额外临时列的情况下实现此目的,则需要使用 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
于 2012-05-02T12:34:33.700 回答