1

現在、あるデータベースから別のデータベースにデータを転送しています。

私の問題は、新しく設計されたテーブルで発生します。古いテーブルは次の列で構成されていました。

car1, car2, car3, id1, id2, id3, id4, idtxt, idtxt2  
(id types could be the same for multiple rows)  

行には、特定の組み合わせがあり、組み合わせcar1, 2, 3ごとに特定のIDがあります。id1は常に入力されますが、2、3、4、txt、およびtxt2は入力される場合とされない場合があります。

私の新しい列は次のもので構成されています。

car1, car2, car3, idtype, id#,text

この新しいテーブルidtypeでは、= to id1、id2、id3、id4、id5(idtxt)、およびid6(idtxt2)であり、id#は=でテーブル1のidの行の値です。これは、同じ組み合わせであっても、各id#に行があるため、古いテーブルよりも多くの行があることを意味します。

ストアドプロシージャを介してこの情報を転送するにはどうしますか?

私は現在、ステートメントへの挿入で構成される複数のストアドプロシージャを実行することしか考えられませんが、データの転送に加えて特定の値を挿入する方法についての答えを見つけることができないようです。すなわち(この転送のすべてに対してidtype = id1)

また、これが最も効率的な方法ではないと確信しています。

説明が必要かどうか教えてください。ありがとう!

編集、私はデータ転送中に特定の値を挿入する方法を理解しました。他の問題/提案はまだ残っています。

4

1 に答える 1

1

私があなたがしていることを正しく理解していれば、簡単なクエリでそれを行うことができます。

最初のテーブルでピボットされたフィールドを取得し、2番目のテーブルでピボットを解除することにより、データを正規化しようとしているようです。

select car1, car2, car3, 'id1' as idtype, id1
from t union all
select car1, car2, car3, 'id2', id2
from t union all
select car1, car2, car3, 'id3', id3
from t union all
select car1, car2, car3, 'id4', id4
from t union all
select car1, car2, car3, 'id5', idtxt
from t union all
select car1, car2, car3, 'id2', idtxt2
from t

これを別のテーブルに保存するには、宛先テーブルを作成して挿入するか、「テーブルの作成」または「選択」を使用します(使用しているデータベースによって異なります)。

たとえば、テーブルを作成している場合、コードは次のようになります。

create table <new table in new database> (
    <tablename>id int primary key identity(1,1),
    car1 <some type>,
    ...,
    CreatedBy varchar(256) default system_user,
    CreatedAt datetime default getdate(),
); 

insert into <new table in new database>(car1, car2, car3, idtype, id1)
    <select query above>

注:これにはSQL Server構文を使用し、id、CreatedBy、およびCreatedAtの3つの追加列を含めました。(ほぼ)すべてのテーブルにこれらの列が必要です。

于 2012-07-09T17:49:23.083 に答える