我有一个存储过程,它根据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年编写的,如果它有任何相关性。
答案 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