“直到存储过程中的循环”?

时间:2011-08-11 10:33:16

标签: sql tsql

我对存储过程的所有这些都很新。 我想要完成的是一个查询,然后循环通过所有返回的行.. 我想过这样的呕吐:

ALTER PROCEDURE usp_findDoor
@door int,
AS
DECLARE @foundId int
SELECT @foundId=Id FROM pd_orders WHERE door=@door

对于上面的每个id,我想在另一个表中删除这个

DELETE FROM pd_md_detials WHERE order_id = @foundId

现在我通过ASP代码执行所有这些操作,它看起来像这样

Set db = con.execute("Select id from pd_orders WHERE door=1")
Do UNTIL db.EOF
  Con.execute("DELETE FROM pd_md_details WHERE order_id="& db("id"))
  db.movenext
LOOP

这在SP中是否可行,或者我是否需要重新考虑?

已编辑的部分

如果我有三个级别的表格,如

pd_order_ecolid -> pd_mounting_details -> pd_inventory

上表的相关列是

ID -> order_data -> pp_id

然后应该可以使用此行删除表pd_inventory

中的所有行
DELETE FROM pd_inventory
WHERE pp_id IN 
  (
     SELECT id FROM pd_mounting_details 
     WHERE order_data IN 
       (
         SELECT id from pd_order_ecolid 
         WHERE order_head=@order_head AND order_line=@order_line
       )
  )

我自己也不能尝试这种感觉我不能做到(但我不能停止思考如何解决这个问题)

祝你好运

2 个答案:

答案 0 :(得分:0)

我错过了什么吗?您想要删除每条记录WHERE door=@door

为什么不改变你的SQL:

DELETE FROM pd_colors WHERE door=@door - 这会删除元组

答案 1 :(得分:0)

如果您只想删除door=@door可以的地方;

delete from pd_colors where door=@door

如果你想循环组合删除行的提取,你可以改为;

delete from pd_colors output deleted.* where door=@door