2009-12-04 2 views
14

Noob вопрос здесь, каждый раз, когда я изменяю определенную запись в таблице SQL Server 2008 R2, я хочу увеличить запись RevisionId; чтобы сделать это, я использую следующий синтаксис:Приращение целого числа в SQL Server

UPDATE TheTable 
SET RevisionId=(SELECT RevisionId 
       FROM TheTable 
       WHERE [email protected]) + 1 
WHERE [email protected]; 

Btw, я собираюсь поставить это в триггер так, что это происходит автоматически, но в то время как этот код работает, он чувствует себя довольно неуклюжим — чище способ сделать это?

ответ

34

Вам не нужно внутренний выбор:

UPDATE TheTable SET RevisionId = RevisionId + 1 WHERE [email protected] 
10

Это SQL идиома инкрементируя поле:

UPDATE TheTable 
SET RevisionId = RevisionId + 1 
WHERE [email protected]; 
+0

Убедитесь, что вы делаете это в транзакции, или вы в конечном итоге попытаетесь преследовать самые странные ошибки. – Donnie

+8

@ Donnie: О чем ты говоришь? UPDATE ... SET field = поле + 1 всегда является атомарным. –

1

Если вы просто ищете значение «строка версии» , вы считали, что добавить столбец TimeStamp в таблицу? SQL Server обновляет его для вас «автоматически» каждый раз. Никакой код с вашей стороны вообще. Они просто не будут последовательно пронумерованы, если это важно для вас.

+1

Это интересно, спасибо за подсказку! В этом случае я также хочу обновить контейнер строки (у меня есть структура дерева в таблице), но использование времени вместо проверки может быть хорошей идеей –

+0

«Временная метка SQL Server» - это 64-разрядная последовательное целое число для вашей базы данных. Слишком плохо, что это называется timestamp, потому что это не имеет ничего общего с датами или временем. Он предназначен для использования в процессах репликации. –

Смежные вопросы