0

我有一个存储过程,它根据 3 个参数生成一些 xml:@property_id、@property_component_id 和 @return_as_xml。@return_as_xml 的值对于所有为 0 的记录都是相同的。

我已经对此进行了修改,现在需要根据特定条件(即活动和租赁物业)为多个物业记录运行它。property和property_component之间存在一对多的关系,所以一个property可以有多个property_components,并且至少有一个对应的记录。

我需要根据属性表中的活动和租用字段来选择我想要的记录。从存在对应property_id 的property_component 表中选择对应的property_component_id。然后我想遍历每个结果行,执行存储过程,为每一行传入新参数。

我不想修改存储过程,因为它是从 asp.net 控制台应用程序执行的,它要求它为单个属性返回 xml,即我不想更改存储过程以返回 xml对于多个属性。

我的存储过程执行只是标准生成的 sql server 代码:

DECLARE @return_value int

EXEC    @return_value = [dbo].[p_CPGUploader__FetchXMLForProperty_RCA]
    @property_id = 106016,
    @property_component_id = 108382,
    @return_as_xml = 0

SELECT  'Return Value' = @return_value
GO

我如何修改它以适用于我描述的场景,如何选择一个记录集然后循环执行基于选择的每一行的值传递的存储过程?我来自 asp.net 背景,我的 SQL Server 技能非常有限,因此将不胜感激。我使用的是 SQL Server 2008 R2,尽管我相信原始存储过程是在 2004 年编写的,如果这有任何相关性的话。

4

1 回答 1

0

如果您确实无法更改存储过程,则可以使用游标创建循环。

除非绝对必要,否则我不会建议采取这种行动。

declare c cursor local read_only for 
select property_component_id from propertiestable

declare @id

open c
fetch from c into @id
while @@fetch_status=0
begin
    EXEC    @return_value = [dbo].[p_CPGUploader__FetchXMLForProperty_RCA]
            @property_id = 106016,
            @property_component_id = @id,
            @return_as_xml = 0

   fetch next from c into @id
end
close c
deallocate c
于 2013-10-09T07:21:35.557 回答