2017-08-24 17 views
0

私は動的に別のデータベース(db2)をサブクエリし、その結果に基づいて現在のテーブル(db1.t1)を更新しようとしています。フィールドLocation(db1.t1.location)は、どのデータベース(db2)であるべきかを決定します。私はvbaを使用してこれを実現しますが、各行をループしています。確かに私は100%SQL同等のはるかに効率的だと思います。私がやりたい何別のデータベースのサブクエリに基づいてテーブル値を更新します

は、2つのデータベース(データベースDB1の値に基づいて選択される)

  1. DB1

  2. DB2

例えばを持っていますdb1.dbo.t1.location = 'North'の場合はDB2名= 'DBNorth'、db1.dbo.t1.location = 'South'の場合はDB2名= 'DBSouth'です。

フィールドの結合/更新の開始位置が不明です。

次は私が達成しようとしているものです:

  • db1.dbo.t1
  • の行の値に基づいて、参加されるデータベースの確立位置に基づいてデータベースへの参加、unique_identifier(DB1場所を含む.dbo.t1.location、 db1.dbo.t1.unique_identifer)
  • レコードがDB2に存在する場合、他DB1次いで 更新db1.dbo.t1.status 1 0
から一意識別子です

すべてのご協力をいただきありがとうございます。

答えて

-1

文字列を使用してクエリを作成し、execを使用して実行することができます。

+0

例を挙げてください。 –

+0

https://stackoverflow.com/questions/25615901/exec-to-use-database – Ian

+0

@Ianは、私が提供した情報に基づいて、さらに多くの方向性を提供できますか? SQLの変数ではあまり仕事をしていません。 – BIGTONE559

0

あなたはデータベースに参加することはできませんが(100%ではありません)... 異なるデータベースのテーブルを使用するにはdbname..tablenameを使用できます。 あなたはそれを内部結合することができます。あなたのケースで

select * from db1..t1 d1 inner join db2..t1 d2 on d1.location=d2.location 

も、データベース名は、データベースDB1にあるように、あなたが最初にあなたのデータを更新し、一時テーブルにそれらを抽出して一時テーブルをループすることができます あなたが試すことができかもしれループ

関連する問題