Установка статуса NOCOUNT с локальной переменной

Я пытаюсь сохранить статус NOCOUNT, чтобы в конце процедуры вернуть его в исходное состояние, но все, что он делает, это дает мне Incorrect syntax near 'NOCOUNT'. ошибка.

Что я делаю неправильно?

IF @@OPTIONS & 512 <> 0     /* check original state of NOCOUNT */
      PRINT N'This user has SET NOCOUNT turned ON.';
  ELSE
      PRINT N'This user has SET NOCOUNT turned OFF.';

DECLARE @NCStat bit
    SET @NCStat = ( @@OPTIONS & 512 )   /* sets @NCStat to original state of NOCOUNT */

SET NOCOUNT ON ;

IF @@OPTIONS & 512 <> 0     /* verify state of NOCOUNT */
      PRINT N'This user has SET NOCOUNT turned ON.';
  ELSE
      PRINT N'This user has SET NOCOUNT turned OFF.';

PRINT N'NCStat = ' + cast(@NCStat as nvarchar) ;        /* verify value of @NCStat */

/* line 23 */  SET NOCOUNT  @NCStat ;       /* return NOCOUNT to original state */

IF @@OPTIONS & 512 <> 0     /* verify state of NOCOUNT */
      PRINT N'This user has SET NOCOUNT turned ON.';
  ELSE
      PRINT N'This user has SET NOCOUNT turned OFF.';
GO

Если строка 23 выделена, все остальные строки работают нормально, но строка 23 выдает вышеуказанную ошибку.

1 ответ

Решение

Вы не можете использовать переменную для установки NOCOUNT:

/* line 23 */  SET NOCOUNT  @NCStat ; /* not legal syntax */

Я бы сделал это вместо этого:

/* line 23 */
if @NCStat = 1
    SET NOCOUNT ON
else
    SET NOCOUNT OFF
Другие вопросы по тегам