簡體   English   中英

調用存儲過程並從另一個存儲過程傳遞參數

[英]Calling stored procedure and passing parameter from another stored procedure

這是我的存儲過程,它根據作為XML參數傳遞給它的數組刪除行:

BEGIN

DECLARE @docHandle int
EXEC sp_xml_preparedocument @docHandle OUTPUT, @XMLDoc

DELETE Comments WHERE 
       ID IN (SELECT * FROM OPENXML(@docHandle, '/values/value1', 2) WITH (value1 INT '.'))

EXEC sp_xml_removedocument @docHandle
END

現在,我想調用另一個存儲過程(而不是DELETE)(執行分層刪除,它接收ID參數)

我怎樣才能做到這一點?

更新:這是我的第二個SP:

(
    @ID int
)
AS
IF @ID<>1 
BEGIN   
    CREATE TABLE #nodesC (id int primary key)
    INSERT INTO  #nodesC (id) VALUES (@ID )

    WHILE @@rowcount > 0
        INSERT INTO #nodesC 
        SELECT child.ID  
        FROM Comments child
        INNER JOIN #nodesC parent ON child.ParentId = parent.id
        WHERE child.ID  NOT IN (SELECT id FROM #nodesC)

    DELETE
    FROM Comments
    WHERE ID  IN (SELECT id FROM #nodesC)

END

您不能直接將數組作為參數傳遞。 所以:

  • 傳遞XML並解析第二個存儲過程
  • 使用表數據類型(SQL Server 2008)
  • 在解析的XML中,每個ID多次調用第二個存儲的proc(不好,這里是為了完整性)

否則,有關如何處理此問題的權威文章是Erland Sommarskog撰寫的SQL Server 2005中的“ 數組和列表”。

您將需要一個光標。

DECLARE c CURSOR LOCAL FORWARD_ONLY FOR SELECT ... FROM OPENXML(...) WITH(...)
OPEN c
WHILE 1 <> 0 BEGIN
    FETCH c INTO ...
    IF @@fetchstatus <> 0 BREAK
    EXEC ...
END
CLOSE c
DEALLOCATE c

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM