存储过程循环

时间:2013-10-09 07:11:28

标签: sql sql-server loops stored-procedures

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

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

我有些需要根据Property表中的活动和租用字段选择我想要的记录。从property_component表中选择相应的property_component_id,其中存在相应的property_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

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

1 个答案:

答案 0 :(得分: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