1 行 (id) のみを更新し、ステータスが == の場合のみを stat に更新したい
UPDATE link_list SET status=0 WHERE id=@id AND status=@stat;
今、すべての行を削除したいのですが、上記が影響を受けた場合にのみ、上記が影響を受けた場合にのみ削除するように以下を変更するにはどうすればよいですか?
DELETE link_list WHERE linkId=@id;
1 行 (id) のみを更新し、ステータスが == の場合のみを stat に更新したい
UPDATE link_list SET status=0 WHERE id=@id AND status=@stat;
今、すべての行を削除したいのですが、上記が影響を受けた場合にのみ、上記が影響を受けた場合にのみ削除するように以下を変更するにはどうすればよいですか?
DELETE link_list WHERE linkId=@id;
何のDB?
OUTPUT句をサポートするデータベース(SQL Server、ORAcle、DB2だと思います)では簡単です:
UPDATE link_list SET status=0
OUTPUT @linkID= DELETED.@id
WHERE id=@id AND status=@stat;
DELETE link_list WHERE linkId=@linkID;
もう 1 つのオプションは、ON DELETE CASCADE で外部キー制約を使用し、エンジンに削除を任せることです。
トリガーの使用を提案する @Rahuls のコメントを 2 番目に使用します。別の方法を次に示します。
UPDATE link_list SET status=0, id=(@affectedid:=id) WHERE id=@id AND status=@stat;
DELETE link_list WHERE linkId = @affectedid;
行が一致しなかった場合、@affectedid
ユーザー変数は NULL である必要があるため、操作DELETE
は行われません。ただし、特定のセッションでこれを複数回行う可能性が高い場合は、値が@affectedid
以前の更新から引き継がれる可能性があるため、明示的に NULL に設定することをお勧めします。
注意: 私はこれをテストしていないので、注意して徹底的にテストしてください。
をチェック@@rowcount
してみてください。これにより、前のステートメントの影響を受けた行の数がわかります。
ステータスが 0 の行のみを削除できます - それが最後の更新であったかどうかを直接言うことはできません
ステータスが 0 の場所を削除するには
DELETE link_list WHERE linkId=@id and statua = 0