Когда вы говорите, не работает, что вы имеете в виду? Если предположить, что это SQL Server
- T-SQL
, то, что вы делаете, выглядит правильно.
Таким образом, чтобы преобразовать ваш сценарий в использование переменных таблицы, отсюда и префикс @
в именах таблиц - ie this является переменной, то следующее дает вам то, что вы хотите:
setup
declare @tblparts table
(
part varchar(100)
, quantity int
);
declare @tblestparts table
(
id int
, part varchar(100)
, quantity int
);
insert into @tblparts
values
('AAA1000', 1),
('AAB1000', 2),
('AAC1000', 3)
insert into @tblestparts
values
(1, 'AAA1000', 20),
(1, 'AAB1000', 21),
(1, 'AAC1000', 22),
(2, 'AAA1000', 15)
update
UPDATE t
SET t.Quantity = t.Quantity + st.Quantity
FROM @tblparts t
INNER JOIN @tblestparts st ON st.Part = t.Part
WHERE t.Part = 'AAA1000' AND st.ID = 1
Все, что я здесь сделал, изменил ваш запрос на используйте псевдонимы для простоты. Кроме того, вам не нужно AND st.ID = 1
здесь.
результат
Следующий запрос:
select *
from @tblparts
дает следующие результаты:
AAA1000 21
AAB1000 2
AAC1000 3
Дело в вашем запросе, вы можете выполнить его только один раз, прежде чем потеряете исходные данные из обновления.