Как отключить результаты запроса при выполнении хранимой процедуры из хранимой процедуры?

Внутри хранимой процедуры другая хранимая 9X_sql-srever процедура вызывается внутри курсора. Для 9X_ms-sql-server каждого вызова окно результатов SQL Management 9X_cursors Studio показывает результат. Курсор повторяется 9X_sql-server более 100 раз, и в этот момент окно результатов 9X_stored-procedure закрывается с ошибкой. Есть ли способ остановить 9X_stored-procedures хранимую процедуру внутри курсора от вывода 9X_sql-server каких-либо результатов?

 WHILE @@FETCH_STATUS = 0 BEGIN EXEC @RC = dbo.NoisyProc SELECT @RValue2 = 1 WHERE @@ROWCOUNT = 0 FETCH NEXT FROM RCursor INTO @RValue1, @RValue2 END 

Спасибо!

24
0
6
Общее количество ответов: 6

Ответ #1

Ответ на вопрос: Как отключить результаты запроса при выполнении хранимой процедуры из хранимой процедуры?

Вы можете отказаться от результатов в SQL 9X_ms-sql-server Server Mgmt Studio 2005. следуя инструкциям 9X_mssql ниже:

• Щелкните правой кнопкой мыши в окне 9X_sproc запроса.
• Выберите «Параметры запроса»
• Щелкните 9X_stored-procedure узел «Результаты» на левой панели в виде 9X_stored-procedure дерева
• Установите флажок «Отменить результаты 9X_ms-sql-server после выполнения» в центре / справа формы

Можете 9X_sql-server примерить

DECLARE @i int SET @i = 1 WHILE (@i <= 100) BEGIN SELECT @i as Iteration SET @i = @i + 1 END 

33
1

  • Это должен быть принятый ответ - это опция SSMS, которая делает именно то, что ...

Ответ #2

Ответ на вопрос: Как отключить результаты запроса при выполнении хранимой процедуры из хранимой процедуры?

вы можете вставить результаты во временную 9X_ms-sql-server таблицу, а затем удалить временную таблицу

create table #tmp (columns) while ... insert into #tmp exec @RC=dbo.NoisyProc ... end drop table #tmp 

в 9X_sql-srever противном случае, можете ли вы изменить 9X_sql-server вызываемую процедуру, чтобы она принимала 9X_sproc флаг, запрещающий выводить набор результатов?

16
0

Ответ #3

Ответ на вопрос: Как отключить результаты запроса при выполнении хранимой процедуры из хранимой процедуры?

Я знаю, что это старый вопрос, но вы можете 9X_cursors установить SET NOCOUNT ON, чтобы SP не выводил сообщение 9X_sql-server для каждой строки.

12
2

  • NOCOUNT хорош, так как не позволяет отображать количество результатов, однако 6eorge Jetson / Robert Koritnik исключает отображение допо ...

Ответ #4

Ответ на вопрос: Как отключить результаты запроса при выполнении хранимой процедуры из хранимой процедуры?

Плохие курсоры. Не используйте повторно 9X_sql-server сохраненный код процедуры, если это означает, что 9X_sql-srever вам нужно выполнять основанную на наборах 9X_mssql функцию с курсором. Лучше для производительности 9X_stored-procedures писать код на основе набора.

Мне кажется, меня 9X_stored-procedures беспокоит то, что вас больше беспокоит подавление 9X_cursors сообщений, чем то, что у вас есть ошибка 9X_stored-procedure в курсоре.

3
1

  • Вы правы - хотя я здесь ограничен. Я не могу изменить хранимую процедуру по причинам поддержки, так как она принадлежит третьей сторо ...

Ответ #5

Ответ на вопрос: Как отключить результаты запроса при выполнении хранимой процедуры из хранимой процедуры?

Вероятно, ошибка возникает из-за того, что 9X_mssql возвращается слишком много наборов записей, а 9X_stored-procedure не из-за логической ошибки вашего SP или 9X_cursors самого курсора. Взгляните на этот пример:

DECLARE @I INT SET @I=0 WHILE @I<200 BEGIN SELECT * FROM INFORMATION_SCHEMA.TABLES SET @I = @I + 1 END 

Будет 9X_sql-srever выполнено несколько раз (чуть больше 100), а 9X_ms-sql-server затем завершится ошибкой:

В запросе превышено 9X_stored-procedures максимальное количество наборов результатов, которые 9X_sql-server могут отображаться в таблице результатов. В 9X_mssql сетке отображаются только первые 100 наборов 9X_ms-sql-server результатов.

SSMS имеет ограничение на количество 9X_cursors наборов записей, которые она может вам показать. Один 9X_sproc из быстрых способов обойти это ограничение 9X_sql-srever - нажать Ctrl + T (или меню Query-> Results 9X_sql-srever to-> Results to Text), чтобы вывод был в 9X_mssql виде обычного текста, а не наборов записей 9X_cursors в виде таблиц. В конце концов вы достигнете 9X_sql-srever другого предела (окно результатов не может 9X_stored-procedure обрабатывать бесконечное количество текста), но 9X_ms-sql-server оно будет намного больше.

В приведенном выше 9X_sql-srever примере вы не получаете ошибку после изменения 9X_sql-server результатов в текстовой форме!

1
0

Ответ #6

Ответ на вопрос: Как отключить результаты запроса при выполнении хранимой процедуры из хранимой процедуры?

Это старая страница и старые ответы. Но 9X_stored-procedures лучший ответ не получил голосов наверху. Я 9X_ms-sql-server полагаю, это потому, что не было предоставлено 9X_stored-procedure достаточно объяснений.

Используйте настройку 9X_sproc NOCOUNT. Всем следует обратить внимание 9X_sql-srever на параметр NOCOUNT. Значение по умолчанию 9X_ms-sql-server - ВЫКЛ.

Изменение настройки по умолчанию 9X_sql-server для этого универсально даже в новой базе 9X_ms-sql-server данных может вызвать путаницу у некоторых 9X_sql-srever программистов \ пользователей. Я рекомендую 9X_stored-procedure использовать подход, состоящий в том, чтобы 9X_cursors зафиксировать настройку перед ее изменением, а 9X_sql-server затем вернуть ее обратно. Это показано в 9X_sql-srever примере сценария ниже, который демонстрирует 9X_ms-sql-server использование параметра NOCOUNT.

Вот хорошая 9X_sql-srever статья. https://www.sqlshack.com/set-nocount-on-statement-usage-and-performance-benefits-in-sql-server/

DROP TABLE IF EXISTS TestTable GO CREATE TABLE TestTable (ID INT, TestText VARCHAR (40)) GO -- Get the Original NOCOUNT setting and save it to @OriginalNoCountSettingIsOn DECLARE @options INT SET @options = @@OPTIONS DECLARE @OriginalNoCountSettingIsOn AS bit SET @OriginalNoCountSettingIsOn = IIF(( (512 & @@OPTIONS) = 512 ),1,0) -- Now set NOCOUNT ON to suppress result output returned from INSERTS -- Note - this does not affect @@ROWCOUNT values from being set SET NOCOUNT ON -- <---- Try running script with SET NOCOUNT ON and SET NOCOUNT OFF to See difference INSERT INTO TestTable (ID, TestText) VALUES (0, 'Test Row 1') INSERT INTO TestTable (ID, TestText) VALUES (0, 'Test Row 2'), (0, 'Test Row 3'), (0, 'Test Row 4') INSERT INTO TestTable (ID, TestText) VALUES (0, 'Test Row 5') /*Now set NOCOUNT back to original setting*/ IF @OriginalNoCountSettingIsOn = 1 BEGIN SET NOCOUNT ON END ELSE BEGIN SET NOCOUNT OFF END DROP TABLE IF EXISTS TestTable GO 

1
0