web-dev-qa-db-ja.com

SQLServerで整数をインクリメントする

ここでのNoobの質問ですが、SQL Server 2008 R2テーブルの特定のレコードを変更するたびに、RevisionIdレコードをインクリメントしたいと思います。そのために、次の構文を使用しています。

UPDATE TheTable
SET RevisionId=(SELECT RevisionId
                FROM TheTable
                WHERE Id=@id) + 1
WHERE Id=@id;

ところで、これをトリガーに入れて、これが自動的に行われるようにしますが、このコードは機能しますが、かなり不格好に感じます。これを行うためのよりクリーンな方法はありますか?

17
Ana Betts

内部選択は必要ありません:

UPDATE TheTable SET RevisionId = RevisionId + 1 WHERE Id=@id
42
Mark Byers

これは、フィールドをインクリメントするためのSQLイディオムです。

UPDATE TheTable
 SET RevisionId = RevisionId + 1
 WHERE Id=@id;
12
wallyk

「行バージョン」の値を探しているだけの場合は、テーブルにTimeStamp列を追加することを検討しましたか? SQL Serverは、毎回「自動的に」更新します。あなたの側にはコードがまったくありません。それがあなたにとって重要であるならば、それらはただ順番に番号が付けられません。