1

私はSQLの初心者で、1つの問題に遭遇しました。

3 つの列の値に基づいて、最近追加された列を更新する必要があります。他のテーブルの対応する列と同じ場合は、他のテーブルの値に基づいてこの列を更新する必要があります。

これは私がこれまでに試したことです

update a 
set a.id = ( select top 1 b.id from OtherTable b 
     where b.k='Doz' and b.year = a.year and b.number = a.number)
from ThisTable a 

エラーメッセージは次のとおりです。

サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。

トップ1を使用した場合、複数の行が存在する可能性はありますか?

私の他の試み:

update a 
set a.id = b.id
from ThisTable a
inner join OtherTable b
on b.k = 'Doz' and a.year = b.year and a.number = b.number

まだ問題が残っています。

私が行った場合:

select b.id
from ThisTable a
inner join OtherTable b
on b.k = 'Doz' and a.year = b.year and a.number = b.number

更新する必要があるすべての ID が表示されます。列に指定された値を持つ where 句を追加すると、複数ではなく 1 つのレコードのみが取得されます。

私は何を間違っていますか?助けてください

4

2 に答える 2

0

回答ありがとうございます。すべてのクエリが適切であることが判明しました。更新しようとするたびに発生するテーブル トリガーに問題がありました。実行計画を含めて、追加のクエリに気付きました。これはレガシー データベースで、Programmability/Triggers フォルダーに何もないことがわかったので、データベースにトリガーがないと考えました。クエリの更新で可能なすべての組み合わせを試してみましたが、結果は同じでした。次に、テーブルレベルのトリガーを発見しました。混乱してすみません、ssmsの初心者:)

于 2013-10-18T19:29:47.927 に答える
0

代わりにこれを試してください

update ThisTable 
set ThisTable.id = b.id
from ThisTable
     inner join othertable b
          on ThisTable.year = b.year
          and ThisTable.number = b.number
where b.k = 'doz'
于 2013-10-16T14:34:39.530 に答える