Лучший способ проверить, была ли строка обновлена в SQL

Измените строку на

`sakjgbsd aksdg's ad asidg's iasudgbsb` // backticks (sign under tilde ~)

или

"sakjgbsd aksdg's ad asidg's iasudgbsb"
8
задан Ange1 23 December 2015 в 14:36
поделиться

7 ответов

Проверьте старое по сравнению с новыми данными в Вашем коде вместо того, чтобы делать его в запросе.

Никакая потребность побеспокоить уровень DB излишне, если данные не изменились вообще.

Короче говоря, если данные не изменились, не отправляйте оператор UPDATE.

9
ответ дан 5 December 2019 в 10:44
поделиться

Один путь состоит в том, чтобы запустить транзакцию, выбрать содержание строки и сравнить ее с тем, к чему Вы собираетесь обновить ее. Если они не соответствуют, то сделайте обновление и закончите транзакцию. Если они соответствуют, откатывают транзакцию.

2
ответ дан 5 December 2019 в 10:44
поделиться

Если Вы захотите сделать это заблаговременно, единственный способ, которым я могу думать об этом, то Вы сделаете, это должно изменить оператор Where оператора обновления для сравнения существующего значения по сравнению с новым значением (для КАЖДОГО значения). Если КАКОЙ-ЛИБО из них не равен, то обновление должно произойти.

1
ответ дан 5 December 2019 в 10:44
поделиться

Именно тогда DAL удобен. Это отслеживает весь colums поэтому, если ни один не изменился затем, я даже не отправляю оператор UPDATE в базу данных.

1
ответ дан 5 December 2019 в 10:44
поделиться

Это зависит от того, имеете ли Вы контроль над данными или нет. Seb выше корректен в высказывании, что необходимо проверить старые данные по новым данным прежде, чем сделать обновление. Но что, если данные не находятся под Вашим контролем?

Скажите, что Вы - веб-сервис, который попросили сделать обновление. Затем единственный способ проверить состоял бы в том, чтобы запросить существующие данные и сравнить их с новыми данными.

Не знайте ни о какой функциональности SQL, которая обнаружила бы, изменило ли обновление на самом деле какие-либо данные или нет.

Существуют пути в SQL для обнаружения, сколько строк было включено в оператор обновления. Не знайте о способе обнаружить, изменил ли оператор обновления на самом деле какие-либо данные, которые будет интересно знать.

1
ответ дан 5 December 2019 в 10:44
поделиться

Вы МОГЛИ записать триггер ОБНОВЛЕНИЯ INSTEAD OF в T-SQL, где Вы могли сделать то, что было предложено выше в уровне DAL - сравнивают значения в существующей записи по сравнению со значениями в операторе обновления и или применяют обновление или нет. Вы могли использовать Columns_Updated () функция в триггере, чтобы видеть, было ли что-нибудь обновлено и продолжается соответственно.

Это не особенно эффективно с точки зрения машины, но Вы могли записать это однажды, и это обработает эту ситуацию, неважно, какое приложение, хранимая процедура или другой процесс пытались обновить запись.

0
ответ дан 5 December 2019 в 10:44
поделиться

Кажется, что Вы проходите таблицу и изменяете некоторые строки, затем Вы хотите ВОЗВРАТИТЬСЯ через таблицу во второй раз и обновить метку времени для строк, которые были просто изменены.

Не делайте этого в двух передачах. Просто обновите дату/время в то же время, что и Вы обновляете то, что другие столбцы Вы изменяете:

UPDATE myTable
SET retailprice = wholesaleprice * 1.10,
    lastmodified = GetDate()
WHERE ...

Или Вы делаете заявление обновления на ВСЕХ строках, но для большинства строк, оно просто устанавливает его на значение, которое оно уже имеет? Не делайте этого. Исключите те строки, которые не были бы изменены в Вашем где пункт:

UPDATE myTable
SET retailprice = wholesaleprice * 1.10,
    lastmodified = GetDate()
WHERE retailprice <> wholesaleprice * 1.10
1
ответ дан 5 December 2019 в 10:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: