0

私は SQL にまったく慣れていないので、SQL Server 2005 で記述しようとしている手順について少し助けを求めています。

クエリの結果でテーブルを挿入または更新しようとしています。

私はINSERTをうまく書きましたが、期待どおりに機能しますが、レコードが既に存在する場合は、挿入ではなく更新したいと思います。

私の現在のコードは次のとおりです。

INSERT INTO testTable
    ( field1 ,
      field2 ,
      field3,
      field4,
      field5 ,
    )                                   
select 
    'A000001'
    table2.field2,
    GETDATE() , 
    GETDATE()  ,
    NULL , 
    NULL , 
    0  

from 
    table1
INNER JOIN 
    table2 ON table1.field1 = table2.field1 
INNER JOIN 
    table3 ON table2.field1 = table3.field1 
INNER JOIN 
    table4 ON table3.field1 = table4.field1 
WHERE condition

これを変更してfield2、選択したものが既にある場合はtestTable、挿入ではなく更新するようにします。複数のレコードを返す可能性があるため、これを行う方法がわかりません。

他のいくつかの質問を見てきましたが、質問に答えるものは見つかりませんでした(または、複数のレコードの回答を変更する方法がわかりません)

どんな助けでも大歓迎です!

ありがとう、

4

2 に答える 2

0

最良の操作はマージを使用することです。

;with blabla as (select 
    'A000001'
    field2,
    GETDATE() , 
    GETDATE()  ,
    NULL , 
    NULL , 
    0  

from 
    table1
INNER JOIN 
    table2 ON table1.field1 = table2.field1 
INNER JOIN 
    table3 ON table2.field1 = table3.field1 
INNER JOIN 
    table4 ON table3.field1 = table4.field1 
)
merge into test as target
using (select * from blabla) as sources (columnlist...)
on field2 = field2
WHEN MATCHED and Source.Field2 <> Target.Field2 THEN
    UPDATE SET ...
WHEN NOT MATCHED BY TARGET THEN
    INSERT (..) VALUES (..)
WHEN NOT MATCHED BY Source THEN
DELETE;
于 2013-11-04T10:49:12.073 に答える