[解決済み] SQL ServerにおけるINSERT OR UPDATEに関する解決策
2022-03-15 01:22:56
質問
のテーブル構造を想定しています。
MyTable(KEY, datafield1, datafield2...)
.
既存のレコードを更新したり、レコードが存在しない場合に新しいレコードを挿入したいことがよくあります。
基本的には
IF (key exists)
run update command
ELSE
run insert command
一番パフォーマンスの良い書き方は?
どのように解決するのですか?
トランザクションを忘れてはいけない。パフォーマンスは良いが、単純な(IF EXISTS...)アプローチは非常に危険である。
複数のスレッドがInsertまたはUpdateを実行しようとすると、簡単に
主キー違反になります。
Beau Crawfordと@Estebanが提供するソリューションは、一般的なアイデアを示していますが、エラーが発生しやすいものです。
デッドロックやPK違反を回避するためには、以下のような方法があります。
begin tran
if exists (select * from table with (updlock,serializable) where key = @key)
begin
update table set ...
where key = @key
end
else
begin
insert into table (key, ...)
values (@key, ...)
end
commit tran
または
begin tran
update table with (serializable) set ...
where key = @key
if @@rowcount = 0
begin
insert into table (key, ...) values (@key,..)
end
commit tran
関連
-
[エラー処理] [MySQL] [Err] 1241 - オペランドは 1 つのカラムを含む必要があります。
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] SQL ServerでJOINを使用してUPDATE文を実行するにはどうすればよいですか?
-
[解決済み] MySQLで'insert if not exists'を行うにはどうしたらいいですか?
-
[解決済み] MySQLでFULL OUTER JOINを行うにはどうすればよいですか?
-
[解決済み] SQLite - UPSERT *not* INSERT or REPLACE
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み】INSERT IF NOT EXISTS ELSE UPDATE?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQL】1136 - 列数が1行目の値数と一致しない問題を解決
-
[解決済み] Oracleで上位100行を選択する方法は?
-
[解決済み] アドホッククエリとは何ですか?
-
[解決済み] UNIONとUNION ALLの違いは何ですか?
-
[解決済み] SQL Serverでシングルクォートをエスケープするにはどうすればよいですか?
-
[解決済み] SQL JOIN - WHERE句とON句の比較
-
[解決済み] SQL SELECT WHERE フィールドに単語が含まれる場合
-
[解決済み] MySQLでFULL OUTER JOINを行うにはどうすればよいですか?
-
[解決済み] PostgreSQLで一重引用符で囲まれたテキストを挿入する
-
[解決済み] Entity Framework VS LINQ to SQL VS ADO.NETでストアドプロシージャを使う?[クローズド]