Is it possible to execute a stored procedure over a set without using a cursor?

前端 未结 7 918
遥遥无期
遥遥无期 2020-12-15 18:55

I would like to execute a stored procedure over each row in a set without using a cursor with something like this:

SELECT EXEC dbo.Sproc @Param1 = Table1.i

相关标签:
7条回答
  • 2020-12-15 19:25

    Yes. If you have a column you can use within the table to mark the ones processed, you can use WHILE EXISTS:

    DECLARE @Id int
    WHILE EXISTS(SELECT * FROM Table1 WHERE Processed='N')
    BEGIN
     SELECT Top 1 @Id = id from Table1 WHERE Procesed='N'
     EXEC dbo.Sproc @Id
     UPDATE Table1 SET Processed = 'Y' WHERE Id = @Id
    END
    

    Alternately, dump the ids into a temp table or table variable and delete when finished:

    DECLARE @HoldTable table (Id int PRIMARY KEY)
    DECLARE @Id int
    INSERT INTO @HoldTable SELECT Id FROM Table1
    WHILE EXISTS(SELECT * FROM @HoldTable)
    BEGIN
     SELECT @Id = id from @HoldTable
     EXEC dbo.Sproc @Id
     DELETE FROM @HoldTable where Id = @Id
    END
    
    0 讨论(0)
提交回复
热议问题