Если вы используете sql 2005/2008, то в хранимой процедуре вы можете сделать следующее:
update newTable
set readKey='1'
output inserted.id,
inserted.readKey as readKey,
deleted.readKey as prevReadKey
into @tempTable
where id = '1111'
Затем вы можете выбрать из @tempTable, чтобы проверить, имеют ли значения prevReadKey и readKey одинаковые значения, если оба имеют одинаковое значение, вы можете сбросить свой последний измененный datetime.
Таким образом, вам не нужно запускать несколько запросов к таблице в случае, когда значение действительно меняется. Но да, в случае, если значение не меняется, это вызовет два оператора обновления, где ни один не требуется. Это должно быть хорошо, если такие случаи редки.
P.S. ПРИМЕЧАНИЕ. - Данный запрос может быть синтаксически неправильным, поскольку он не проверен. Но так ваша проблема может быть решена. Я сделал это следующим образом, используя предложение OUTPUT с оператором Merge в одном из моих проектов, и это также можно сделать с помощью оператора update. Вот ссылка предложения OUTPUT