0

あるテーブルを別のテーブルに更新する必要があります。これは私たちのライブサーバーなので、申請する前にすべての拠点をカバーしていることを確認したいと思います. これは私が現在持っているものです:

UPDATE [LinkedServer].[DB1].[dbo].[TBL1]
SET t1.[COL1] = t1.[COL1] + (SELECT SUM(t2.[COL2] - t2.[COL1])
                              FROM [DB2].[dbo].[TBL2] t2
                              where [TBL2COL3]=203 and t1.[COL0]=t2.[COL0]))
FROM [LinkedServer].[DB1].[dbo].[TBL1] t1
WHERE t1.[COL0]=t2.[COL0]

基本的に、DB2 t1.[COL0] (一意の値) = t2.[COL0] (一意の値ではない) の 2 つの列の差を合計し、それらの値で TBL1 を更新しようとしています。

t1.[COL1] + (SELECT SUM(t2.[COL2] - t2.[COL1])
              FROM [DB2].[dbo].[TBL2] t2
              where [TBL2COL3]=203 and t1.[COL0]=t2.[COL0]))

上記のコードは、必要な正しいデータを提供します。これが他のテーブルを更新する正しい方法であるかどうかを知る必要があるだけです。t1.[COL0] と t2.[COL0] の両方が同じ場所だけを更新する必要があります。

前もって感謝します

4

2 に答える 2

0

Where 句の t2 エイリアスは何にもバインドされていません。サブクエリから取得したいと思いますが、その時点で、基準に一致するすべての行を集計しています (t1.col0 = t2.col0 を含む)。さらに、tbl1 テーブルを更新しようとしていますが、代わりに t1.col1 を設定しています。

次のようなものが必要になります。

update [LinkedServer].db1.dbo.tbl1
    set tbl1.col1 = tbl1.col1 + iv_aggregate.total
from [LinkedServer].db1.dbo.tbl1
join (
    select tbl2.col0, sum(tbl2.col2 - tbl2.col1) total
    from db2.dbo.tbl2
    where tbl2.col3 = 203
    group by tbl2.col0 ) iv_aggreagate
  on iv_aggregate.col0 = tbl1.col0
from [LinkedServer].db1.dbo.tbl1
于 2013-07-12T22:38:44.867 に答える