Как динамически обновить первые n строк? - PullRequest
1 голос
/ 19 сентября 2011

У меня есть таблица с похожими строками ... как

PartNo  SerialNo  Inven_Qty  Status
------  --------  ---------  ------
001A    NULL      1          IN
001A    NULL      1          IN
001A    NULL      1          IN
001A    NULL      1          IN

Теперь я хочу динамически обновлять строки ... У меня есть веб-страница, где я вводю PartNo и значение элементов, которые являются OUT... ex 2 элемента OUT ... Я хочу обновить 2 строки с Inven_Qty 0 и статусом OUT .... Может кто-нибудь сказать, пожалуйста, как это сделать ???

Заранее спасибо.

Ответы [ 4 ]

4 голосов
/ 19 сентября 2011

На основе Микаэля Эрикссона, для Oracle:

update YourTable
  set Inven_Qty = 0,
      Status = 'OUT'
where PartNo = '001A'
  and Status = 'IN'
  and rownum<=3

(для обновления 3 элемента)

0 голосов
/ 19 сентября 2011

Вероятно, было бы лучше, если бы вы могли использовать 'SerialNo' в запросе, но если нет, вы можете попробовать:

update <your table> set Status='OUT', Inven_Qty=0 where rowid in 
    (select rowid from <your table> where Status=IN and Inven_Qty=1
        and PartNo=<part number> where rownum <= <some value>)

Но это работает, только если вы предполагаете, что Inven_Qty равен 1 или 0.Если Inven_Qty может быть больше 1, я не думаю, что вы можете сделать это только с помощью одного запроса.

РЕДАКТИРОВАТЬ: Это не будет работать, если SerialNo равен нулю.Вы должны иметь какой-то уникальный идентификатор, чтобы это работало.Если вы этого не сделаете, вы должны добавить один.Если вы работаете над Oracle, вы можете использовать ROWID.

0 голосов
/ 19 сентября 2011

Этот синтаксис работает для SQL Server. Может работать и для других СУБД.

update top (2) YourTable
set Inven_Qty = 0,
    Status = 'OUT'
where PartNo = '001A' and
      Status = 'IN'

Еще один способ, который легче перевести на какую-то другую СУБД

with C as
(
  select Inven_Qty,
         Status,
         row_number() over(order by (select 1)) as rn
  from @T
  where PartNo = '001A' and
        Status = 'IN'
)
update C
set Inven_Qty = 0,
    Status = 'OUT'
where rn <= 2
0 голосов
/ 19 сентября 2011

Вы можете сделать это так.

UPDATE table_name
SET Status = "OUT", Invent_QTY = 0,
WHERE PartNo = "<part number>" AND SerialNo = <serial number>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...