Как получить идентификаторы моего пакетного обновления SQL Server - PullRequest
1 голос
/ 20 июня 2019

Как я могу получить идентификаторы затронутых строк в моем пакетном обновлении? Как я пытаюсь вставить в таблицу tbl.history всех обновлений / транзакций.

Ниже приведен пример таблицы:

table tbl.myTable
+------+-----------+------------+
|  ID  |   Amount  |    Date    |
+------+-----------+------------+
|  1   |    100    | 01/01/2019 |
+------+-----------+------------+
|  2   |    200    | 01/02/2019 |
+------+-----------+------------+  
|  3   |    500    | 01/01/2019 |
+------+-----------+------------+  
|  5   |    500    | 01/05/2019 |
+------+-----------+------------+   

Вот мой запрос на пакетное обновление:

Update tbl.myTable set Amount = 0 where Date = '01/01/2019'

с запросом он обновит / повлияет на две данные с идентификаторами 1 и 3. Как я могу получить эти идентификаторы для вставки их в другую таблицу (tbl.history)?

Ответы [ 3 ]

5 голосов
/ 20 июня 2019

Используйте предложение OUTPUT. Он предоставляет вам «таблицу» с именем deleted, которая содержит значения до обновления, и «таблицу» с именем inserted, которая содержит новые значения.

Итак, вы можете запустить

Update tbl.myTable set Amount = 0
output inserted.*,deleted.*
where Date = '01/01/2019'

Чтобы понять, как это работает, после этого вы можете создать временную таблицу и OUTPUT нужные вам поля INTO it:

Update tbl.myTable set Amount = 0
output inserted.*,deleted.* into temp_table_with_updated
where Date = '01/01/2019'
1 голос
/ 20 июня 2019

Вы можете сделать это, используя OUTPUT

declare @outputIDs as TABLE
(
   ID int
)

Update tbl.MyTable Set [Amount] = 0
OUTPUT INSERTED.ID into @outputIDs
WHERE [Date] = '01/01/2019'

Таблица @outputIDs будет иметь два обновленных идентификатора.

0 голосов
/ 20 июня 2019

Использовать механизм кэширования (табличная переменная, cte и т. Д.)

declare @temp table (id int)
insert into @temp select id from tbl.myTable where Date = '01/01/2019'
update tbl.myTable set Amount=0 where id in (select id from @temp)
-- do more stuff with the id's
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...