2016-11-15 2 views
0

У меня есть запрос «Обновление» SQL и на котором я обновляю соответствующие записи с помощью Inner JOin временной таблицы. Пожалуйста, проверьте запрос ценам ниже Как вернуть количество обновленных строк в SQL-запросе?

update tblProduct as p 
inner join #temp_Product prod on p.id = prod.id and p.name = prod.name 

Теперь я хочу, чтобы вернуть таблицу, которая будет содержать столбцы «идентификатор», «имя» и количество обновленных строк (из tblProduct таблицы) на основе «ID» и "имя".

Пожалуйста, проверьте таблицы

ценам ниже

1) tblProduct

enter image description here

2) #temp_Product

enter image description here

3) И ниже результат должен возвращать

enter image description here

+3

Might Я предлагаю вам воспользоваться моментом и отредактировать ваше сообщение, чтобы использовать текст, а не изображения, и если вы должны использовать изображения, удалить ненужные пробелы. Также покажите, что вы пробовали до сих пор. – scsimon

+0

Можете ли вы уточнить, хотите ли вы запустить запрос в двух таблицах или хотите обновить tblProduct? В таблице tblProduct и в таблице результатов вы установили разные столбцы. – DVT

+0

Используйте предложение 'OUTPUT'. –

ответ

1

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

Что бы я сделал, это запустить отдельный запрос выбора - возможно, до обновление, но в той же транзакции, если это возможно, - это будет считать обновления, которые будут применяться.

Поскольку вы не предоставили SET выражения не могут включать в себя проверку того, что изменение будет фактически сделано, но это не должно быть трудно добавить к запросу (просто добавьте where условия для <oldValue> != <newValue>); возможность сделать это - то, почему вы запустили select до update.

Основной запрос:

select p.id, p.name, count(*) 
    from   tblProduct as p 
     inner join #temp_Product prod 
       on p.id = prod.id 
       and p.name = prod.name 
group by p.id, p.name