0

良い一日、

基本的に、古いテーブルを参照しているシステムがあります。しかし、問題は、新しいテーブル (古いものと同じですが主キーが異なる) があり、システムを新しいテーブルに参照したいということです。現在のシステムには、古いテーブルからの外部キーが既に格納されています。しかし、これらの外部 ID を更新して、新しいテーブルを適切に参照したいと考えています。問題は、古いテーブルが何百ものレコードで構成されており、新しいテーブルを参照するシステム テーブルを更新するためにどのクエリを使用すればよいかわかりません。

サンプルデータを含む古いテーブル列 (数百のレコードがある)

| CompanyId |      Name      |
|   4301    |   Apple Inc.   | 
|   4302    |   Microsoft    | 

サンプル データを含む新しいテーブル列 (古いが異なる主キーを持つ同じデータ)

| CompanyId |      Name      |
|   1002    |   Apple Inc.   | 
|   1003    |   Microsoft    | 

これは、古い会社のテーブルからの外部キーを持つ私のサンプル テーブルです。

| CustomerId |  CompanyId  |  CustomerName  |
|     1      |     4301    |  John E. Doe   |
|     2      |     4301    |  Lorem K. Fox  |

私が知っている唯一の手順は、クエリを 1 つずつ手動で作成することです。

UPDATE Customer SET CompanyId=1002 WHERE CustomerId=1

しかし、私は何百ものレコードを扱っているので、これは悪い考えです。

何か助けてください。

4

2 に答える 2

0

を使用できますjoin。名前が同じであると仮定します。

update s
    set s.companyid = nt.companid
    from samples s join
         oldtable ot
         on s.companyid = ot.companyid join
         newtable nt
         on ot.name = nt.name;

いくつかの注意事項:

  • これを機能させるには、外部キー制約を削除する必要があります。後で追加する必要があります。
  • 一部の名前が一致しない場合、テーブル内のすべての行が更新されるとは限りません。
  • すべての行が更新されない場合、結果の ID が混在する可能性があります。一部は古いテーブルに、一部は新しいテーブルに割り当てられます。

テーブルが「同一」であることを指定しているので、これらは特定の状況では問題ではないと思います。

于 2019-06-13T10:40:22.063 に答える