如何动态更新前n行?

时间:2011-09-19 08:15:11

标签: sql oracle

我有一张类似行的表......比如

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 ...我想用Inven_Qty更新2行0并且状态为OUT ....任何人都可以告诉我该怎么做???

提前致谢。

4 个答案:

答案 0 :(得分:4)

基于Mikael Eriksson,Oracle:

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

(有3件要更新)

答案 1 :(得分:0)

你可以这样做。

UPDATE table_name
SET Status = "OUT", Invent_QTY = 0,
WHERE PartNo = "<part number>" AND SerialNo = <serial number>

答案 2 :(得分:0)

此语法适用于SQL Server。也可以为其他DBMS工作。

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

另一种可能更容易转换为其他DBMS的方式

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

答案 3 :(得分:-1)

如果您可以在查询中使用“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为null,则无效。你必须有一些独特的id才能工作。如果你不这样做,你应该添加一个。如果你正在使用oracle,你可以使用ROWID。

相关问题