0

SQLテーブルにデータを移植する必要があります

列()を持つマスターテーブルがありますmasterid, masterdata, year。これmasteridがID列です。

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

テーブルに作成された2013年と2012年のレコード間のリンクを保存する必要がありmastertableます。一時列を追加せずにこれを実現する場合は、T-SQLを使用する必要があります。

(マスターデータのタイプをvarchar(max)指定していないので、そのタイプを推測しました)。

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 に答える
0

ChildId自動インクリメントのID列であると想定します

一時テーブルを必要とせずに、関数/ストアドプロシージャでそれらをまとめることができます。

更新しました

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 に答える