Why don't you just take the body of the first procedure, and build a big set of statements to execute?
Assume the first procedure looks like this:
CREATE PROCEDURE dbo.spGetObsoleteUpdatesToCleanup
AS
SELECT LocalUpdateID FROM dbo.SomeTable WHERE ...;
Then rip out that SELECT statement and change it to:
DECLARE @sql nvarchar(MAX) = N'';
SELECT @sql += N'EXEC dbo.spDeleteUpdate @localUpdateID='
+ RTRIM(LocalUpdateID) + N';' + CHAR(13) + CHAR(10)
FROM dbo.SomeTable WHERE ...;
PRINT @sql; -- this won't show all 30,000 rows
-- EXEC sys.sp_executesql @sql;
Better yet, rip out the bodies of BOTH procedures. The first one is some kind of SELECT, like the above, and the second is a simple delete, like:
DELETE dbo.SomeTable WHERE LocalUpdateID = @LocalUpdateID;
This can be much more practical to do using a single DELETE:
DELETE t
FROM dbo.SomeTable AS t
INNER JOIN dbo.SomeOtherTable AS o
ON t.LocalUpdateID = o.LocalUpdateID
WHERE ...whatever criteria marks these as obsolete...;
Just keep in mind that logging can be an issue and you might consider breaking this up into smaller batches.
If you show us the bodies of the two procedures, we can give you much more direct advice. If all we know is that the two procedures are black boxes, we can't provide anything extremely specific.