Within a stored procedure, another stored procedure is being called within a cursor. For every call, the SQL Management Studio results window is showing a result. The cursor loops over 100 times and at that point the results window gives up with an error. Is there a way I can stop the stored procedure within the cursor from outputting any results?
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC @RC = dbo.NoisyProc
SELECT @RValue2 = 1 WHERE @@ROWCOUNT = 0
FETCH NEXT FROM RCursor INTO @RValue1, @RValue2
END
Thanks!
Cursors bad. Don't reuse stored proc code if it means you have to do a set-based function with a cursor. Better for performance to write the code in a set-nbased fashion.
I think I'm concerned that you are more concerned with supressing the messages than you are that you have an error in the cursor.
You can discard the resultsets in SQL Server Mgmt Studio 2005 by following the steps below:
• Right-click in the query window
• Choose "Query Options"
• Click on the "Results" "node" in the left panel tree view
• Check "Discard results after execution" in the center/right of the form
You can try it on
you could insert the results into a temp table, then drop the temp table
otherwise, can you modify the proc being called to accept a flag telling it not to output a result-set?
I know this question is old, but you could set the
SET NOCOUNT ON
to prevent the SP to output a message for every row.Place:
wrap that around the internal SP, or you could even do it around the SELECT statement from the originating query, that will prevent results from appearing.
Probably the error comes from too much recordsets being returned, rather than a logic flaw on your SP or the cursor itself. Look at this example:
Will run a number of times (slightly more than 100) then fail with:
The SSMS has a limit on the number of record-sets it can show you. One quick way to by-pass that limitation is to press Ctrl+T (or menu Query->Results to->Results to Text) to force the output to be in plain text, rather than table-like recordsets. You'll reach another limit eventually (the results window can't handle an infinite amount of text output) yet it will be far greater.
In the sample above you don't get the error after changing the results to be in text form!