我有一个问题,我试图用不同的解决方案替换以下代码。目前我正在使用游标,但它运行缓慢。我理解迭代解决方案只能用游标或while循环来完成,但我试图找到一个基于集合的方法并且没有想法。我希望我能在这里找到一些灵感。谢谢大家。
--used to find a unique list of Some_ID
@Id1, @Id2, @Id3
DECLARE SomeCursor CURSOR FOR
SELECT SOME_ID FROM SomeTable
WHERE ID1=@Id1 AND ID2=@Id2 and ID3=@Id3
OPEN SomeCursor
FETCH NEXT FROM SomeCursor INTO @SomeID
WHILE @@Fetch_Status = 0
BEGIN
Print @SomeID
--simply populates a single table with values pulled from
--other tables in the database based on the give parameters.
EXEC SP_PART1 @SomeID, @parameters...
print 'part 2 starting'
EXEC SP_PART2 @SomeID, @parameters...
FETCH NEXT FROM SomeCursor INTO @SomeID
print getdate()
END
CLOSE SomeCursor;
DEALLOCATE SomeCursor;
答案 0 :(得分:0)
使这个基于集合的唯一选择是重写sps以使它们基于集合(使用表格式参数的各个参数)或在此proc中编写基于集合的代码而不是重新使用设计的过程用于单一记录。这种情况下代码重用通常是不合适的。
答案 1 :(得分:0)
我不太确定你想要什么,但是为什么不使用你的select语句来创建你的sql脚本并用这样的东西一次性执行它们。
DECLARE @sql VARCHAR(MAX);
SELECT @sql = COALESCE(@sql,'') + 'EXEC SP_Part1 ' + SOME_ID + '; EXEC SP_Part2 ' + SomeID + '; GO '
FROM SomeTable
WHERE ID1=@Id1 AND ID2=@Id2 and ID3=@Id3
EXEC (@sql)