0

1 行 (id) のみを更新し、ステータスが == の場合のみを stat に更新したい

UPDATE link_list SET status=0 WHERE id=@id AND status=@stat;

今、すべての行を削除したいのですが、上記が影響を受けた場合にのみ、上記が影響を受けた場合にのみ削除するように以下を変更するにはどうすればよいですか?

DELETE link_list WHERE linkId=@id;
4

4 に答える 4

3

何の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 で外部キー制約を使用し、エンジンに削除を任せることです。

于 2009-11-12T22:05:51.160 に答える
1

トリガーの使用を提案する @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 に設定することをお勧めします。

注意: 私はこれをテストしていないので、注意して徹底的にテストしてください。

于 2009-11-12T22:06:39.003 に答える
0

をチェック@@rowcountしてみてください。これにより、前のステートメントの影響を受けた行の数がわかります。

于 2009-11-12T22:23:25.413 に答える
0

ステータスが 0 の行のみを削除できます - それが最後の更新であったかどうかを直接言うことはできません

ステータスが 0 の場所を削除するには

DELETE link_list WHERE linkId=@id and statua = 0
于 2009-11-12T22:04:03.170 に答える