Отвечая на вопрос "Как подавить вывод хранимой процедуры?" действительно зависит от того, что вы пытаетесь достичь. Поэтому я хочу поделиться тем, с чем я столкнулся:
Мне нужно было подавить вывод хранимой процедуры (USP), потому что я просто хотел получить количество строк (@@ ROWCOUNT) из вывода. То, что я сделал, и это может не сработать для всех, так как мой запрос уже собирался быть динамическим, я добавил параметр под названием @silentExecution в рассматриваемый USP. Это битовый параметр, который по умолчанию установлен на ноль (0).
Далее, если @silentExecution было установлено равным единице (1), я бы вставил содержимое таблицы во временную таблицу, которая будет подавлять вывод, а затем без проблем выполнить @@ ROWCOUNT.
USP Пример:
CREATE PROCEDURE usp_SilentExecutionProc
@silentExecution bit = 0
AS
BEGIN
SET NOCOUNT ON;
DECLARE @strSQL VARCHAR(MAX);
SET @strSQL = '';
SET @strSQL = 'SELECT TOP 10 * ';
IF @silentExecution = 1
SET @strSQL = @strSQL + 'INTO #tmpDevNull ';
SET @strSQL = @strSQL +
'FROM dbo.SomeTable ';
EXEC(@strSQL);
END
GO
Тогда вы можете выполнить все это так:
EXEC dbo.usp_SilentExecutionProc @silentExecution = 1;
SELECT @@ROWCOUNT;
Цель, стоящая за этим, состоит в том, чтобы вам нужно было, чтобы USP мог возвращать набор результатов в других случаях или случаях, но при этом использовать его только для строк.
Просто хотел поделиться своим решением.