调用存储过程并传递参数从另一个存储过程
问题描述:
这是根据传递给它的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参数)
我该怎么做?
UPDATE:这是我的第二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第二个存储过程(坏,是为了完整性)
否则,你怎么处理这个权威文章是由Arrays and Lists in SQL Server 2005厄兰Sommarskog
答
您需要的光标。
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
你会以完全相同的方式做到这一点? – 2009-10-21 09:53:39
@米奇小麦,你是什么意思? – markiz 2009-10-21 09:56:48