UPSERTの概念に似たT-SQLコマンドに遭遇したのかどうか疑問に思いましたか?オプション(1)または(2)を使用してINSERT | UPDATE操作を実行すると、非常に複雑になり、エラーが発生しやすくなります。
[〜#〜]目的[〜#〜]
目的のレコード(この場合、employee_id 1)が最新であることを確認するには、基本的に同じクエリを2回書き込む必要はありません。
[〜#〜]コンテキスト[〜#〜]
[〜#〜]オプション[〜#〜]
sQL UPDATEを実行... @@ rowcount = 0および@@ error = 0を確認...必要に応じてSQL INSERTを実行
https://stackoverflow.com/questions/1106717/how-to-implement-a-conditional-upsert-stored-procedure "@@ rowcountを使用して更新"
http://technet.Microsoft.com/en-us/library/bb510625.aspx "T-SQL Merge"
アップサートの例
UPSERT従業員(employee_id、employee_number、job_title、first_name、middle_name、surname、modified_at)VALUES(1、'00 -124AB37 '、' Manager '、' John '、' T '、' Smith '、GetDate());
これに対する簡単な答えはノーだと思います。 MERGE
は、より複雑なUPSERT
ロジックに対するMicrosoftの回答でした。そして、あなたは最悪のアプローチすらリストしませんでした:
IF (SELECT COUNT ... ) > 0
UPDATE
ELSE
INSERT
少しタイプして口に放り込んだだけですが、実際によく目にするものです。
いずれにせよ、MERGE
が柔軟性がなく、強力でもない場合は、機能リクエストをMicrosoftに http://connect.Microsoft.com/sql/ で送信することをお勧めします。ビジネスケースを完全に説明してください。 MERGE
よりも提案された構文の真の利点に固執する限り、あなたは私の票を得ました。 「エラーが発生しやすい」部分にこだわりすぎていると、私は買いそうにありません。なぜですか?あなたはどんな声明でも太ることができるからです。
とは言っても、ここであなたのために特別にできることはないと思います。 MERGE
の潜在的な問題を調査する必要があります:
http://www.mssqltips.com/sqlservertip/3074/use-caution-with-sql-servers-merge-statement/