0

我有一个问题,我试图用不同的解决方案替换以下代码。目前我正在使用光标,但它运行缓慢。我的理解是迭代解决方案只能用游标或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;
4

2 回答 2

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)
于 2015-03-23T20:16:18.503 回答
0

使此基于集合的唯一选择是重写 sps 以使其基于集合(使用表值参数而不是单个参数)或在此过程中编写基于集合的代码,而不是重新使用为单个记录设计的过程利用。这是代码重用通常不合适的情况。

于 2015-03-23T20:13:46.243 回答