Search code examples
sqlsql-servert-sql

SQL - Call Stored Procedure for each record


I am looking for a way to call a stored procedure for each record of a select statement.

SELECT @SomeIds = (
    SELECT spro.Id 
    FROM SomeTable as spro
    INNER JOIN [Address] addr ON addr.Id = spro.Id 
    INNER JOIN City cty ON cty.CityId = addr.CityId
    WHERE cty.CityId = @CityId
)


WHILE @SomeIds  IS NOT NULL
BEGIN
    EXEC UpdateComputedFullText @SomeIds
END

Such a thing above is not working of course, but is there a way to do something like that?


Solution

  • You need to use a cursor for that.

    DECLARE @oneid int -- or the appropriate type
    
    DECLARE the_cursor CURSOR FAST_FORWARD
    FOR SELECT spro.Id  
        FROM SomeTable as spro 
            INNER JOIN [Address] addr ON addr.Id = spro.Id  
            INNER JOIN City cty ON cty.CityId = addr.CityId 
        WHERE cty.CityId = @CityId
    
    OPEN the_cursor
    FETCH NEXT FROM the_cursor INTO @oneid
    
    WHILE @@FETCH_STATUS = 0
    BEGIN
        EXEC UpdateComputedFullText @oneid
    
        FETCH NEXT FROM the_cursor INTO @oneid
    END
    
    CLOSE the_cursor
    DEALLOCATE the_cursor