Исправление: Вызов инструкции RAISERROR, в пакет Transact-SQL может вызвать задания SQLAgent сбоя и потери выходных данных в SQL Server

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:309802
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Существенный:Статья содержит сведения об изменении реестра. Перед изменением реестра необходимо создать его резервную копию.. и изучить процедуру его восстановления.. Для получения дополнительных сведений о способах резервного копирования, восстановления и внесения изменений в реестр, обратитесь к следующей статье Microsoft Knowledge Base::
256986Описание реестра Microsoft Windows
Проблема
Если тип шага задания SQLAgent сценарий Transact-SQL, а также при инструкцииКоманда:Создать полеШаг задания-<sql server="" instance="" name=""></sql>Вызов диалогового окна поле инструкцию Transact-SQL инструкции RAISERROR с уровнем серьезности 11 и выше без параметра WITH LOG, задание будет заканчиваться неудачных результатов. Тем не менее несмотря на то, что все инструкции языка Transact-SQL запускается после инструкции RAISERROR вызывается запусков, подавляются все выходные данные. Поэтому вывод не производится инструкции после инструкции RAISERROR выполняется инструкция. Фактически, это может привести к путанице о что случилось с инструкциями в задании. Если вы хотите увидеть фактически выполнена, должны рассмотрим трассировки приложения SQL Profiler. Для получения дополнительных сведений о трассировке приложения SQL Profiler в разделе «Приложения SQL Profiler» в электронной документации по SQL Server.
Решение
ПредупреждениеНеправильное изменение параметров системного реестра с помощью редактора реестра или любым иным путем может привести к возникновению серьезных неполадок.. Эти проблемы могут привести к необходимости переустановки операционной системы.. Корпорация Майкрософт не гарантирует, что эти проблемы можно будет устранить.. Изменения в реестр вы вносите на свой страх и риск..

Сведения о пакете обновления

Чтобы решить эту проблему, получите последний пакет обновления для Microsoft SQL Server 2000. Для получения дополнительных сведений обратитесь к следующей статье Базы Знаний Майкрософт::
290211Как получить последний пакет обновления для SQL Server 2000

Сведения об исправлении

Английская версия исправления содержит версии файлов, приведенные в следующей таблице (или более поздние).. Дата и время для файлов указаны во всеобщем скоординированном времени (UTC).. При просмотре сведений о файле, время изменяется на местное.. Чтобы узнать разницу между временем по Гринвичу и местным временем,Часовой поясвкладки в окне «Дата и время» панели управления.
   Date         Time   Version         Size       File name   -------------------------------------------------------------------   31-May-2003  05:15  2000.80.818.0      78,400  Console.exe   27-Oct-2003  14:51  2000.80.873.0     315,968  Custtask.dll   30-Jan-2004  02:59  2000.80.911.0      33,340  Dbmslpcn.dll   24-Apr-2003  12:42                    786,432  Distmdl.ldf   24-Apr-2003  12:42                  2,359,296  Distmdl.mdf   29-Jan-2003  12:25                        180  Drop_repl_hotfix.sql   11-Sep-2003  13:56  2000.80.859.0   1,905,216  Dtspkg.dll   26-Aug-2003  06:46  2000.80.854.0     528,960  Dtspump.dll   23-Jun-2003  09:10  2000.80.837.0   1,557,052  Dtsui.dll   23-Jun-2003  09:10  2000.80.837.0     639,552  Dtswiz.dll   23-Apr-2003  13:21                    747,927  Instdist.sql   02-May-2003  12:26                      1,581  Inst_repl_hotfix.sql   30-Jan-2004  02:59  2000.80.911.0      90,692  Msgprox.dll   31-Mar-2003  12:37                      1,873  Odsole.sql   30-Jan-2004  02:59  2000.80.911.0      62,024  Odsole70.dll   30-Jan-2004  02:59  2000.80.911.0      25,144  Opends60.dll   30-Jan-2004  02:59  2000.80.911.0      57,904  Osql.exe   02-Apr-2003  09:45  2000.80.797.0     279,104  Pfutil80.dll   04-Aug-2003  04:47                    550,780  Procsyst.sql   11-Sep-2003  11:07                     12,305  Qfe469315.sql   22-May-2003  09:27                     19,195  Qfe469571.sql   29-Jan-2004  11:47                  1,090,380  Replmerg.sql   30-Jan-2004  02:59  2000.80.911.0     221,768  Replprov.dll   30-Jan-2004  02:59  2000.80.911.0     307,784  Replrec.dll   29-Jan-2004  09:54  2000.80.911.0     159,813  Replres.rll   05-Sep-2003  10:30                  1,087,150  Replsys.sql   13-Aug-2003  02:58                    986,603  Repltran.sql   30-Jan-2004  02:59  2000.80.911.0     287,304  Rinitcom.dll   30-Jan-2004  02:59  2000.80.911.0      57,916  Semnt.dll   29-Jul-2003  06:43  2000.80.819.0     492,096  Semobj.dll   31-May-2003  04:57  2000.80.818.0     172,032  Semobj.rll   02-Jan-2004  06:12  2000.80.904.0      53,832  Snapshot.exe   09-Dec-2003  06:37                    117,834  Sp3_serv_uni.sql   04-Feb-2004  11:16  2000.80.913.0      28,672  Sqlagent.dll   04-Feb-2004  11:17  2000.80.913.0     311,872  Sqlagent.exe   07-Jan-2004  09:08  2000.80.905.0     126,976  Sqlakw32.dll   30-Jan-2004  02:59  2000.80.911.0   4,215,360  Sqldmo.dll   07-Apr-2003  04:14                     25,172  Sqldumper.exe   29-Jan-2004  09:47  2000.80.911.0      28,672  Sqlevn70.rll   30-Jan-2004  02:59  2000.80.911.0     180,792  Sqlmap70.dll   02-Sep-2003  13:26  2000.80.857.0     188,992  Sqlmmc.dll   02-Sep-2003  09:33  2000.80.857.0     479,232  Sqlmmc.rll   21-Oct-2003  10:38  2000.80.871.0     401,984  Sqlqry.dll   30-Jan-2004  02:59  2000.80.911.0      57,920  Sqlrepss.dll   04-Feb-2004  11:18  2000.80.913.0   7,610,449  Sqlservr.exe   30-Jan-2004  02:59  2000.80.911.0     590,396  Sqlsort.dll   30-Jan-2004  02:59  2000.80.911.0      45,644  Sqlvdi.dll   30-Jan-2004  02:59  2000.80.911.0     106,588  Sqsrvres.dll   30-Jan-2004  02:59  2000.80.911.0      33,340  Ssmslpcn.dll   30-Jan-2004  02:59  2000.80.911.0      82,492  Ssnetlib.dll   30-Jan-2004  02:59  2000.80.911.0      25,148  Ssnmpn70.dll   27-Oct-2003  14:51  2000.80.873.0     123,456  Stardds.dll   30-Jan-2004  02:59  2000.80.911.0     158,240  Svrnetcn.dll   30-Jan-2004  02:59  2000.80.911.0      76,416  Svrnetcn.exe   30-Apr-2003  10:22  2000.80.816.0      45,132  Ums.dll        30-Jan-2004  02:59  2000.80.911.0      98,872  Xpweb70.dll
Примечание.Из-за зависимостей между файлами последние исправления или функция, которая содержит эти файлы могут содержать дополнительные файлы.

После установки данного исправления поведение агента SQL Server определяется новый реестра типа DWORD, называется TruncateJobResultOnError в одном из следующих подразделов реестра:
  • Server\MSSQLServer\SQLServerAgent HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL (экземпляр по умолчанию)
  • Server\ SQL HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft <instancename>\SQLServerAgent (с именем экземпляра)</instancename>
Для активирования новых возможностей, это значение TruncateJobResultOnError равным 0. После перезапуска агента SQL Server, результаты работы больше не будут усеченыRAISERRORоператоры. Для восстановления прежних версий поведения, можно присвоить значение TruncateJobResultOnError 1. Это значение по умолчанию, если значение не задано.

ПредупреждениеИзменение значения 0 не может быть эффективный подход, когда сценарий, который имеет бесконечный цикл возникает ошибка. Агент регистрирует ошибку постоянно и может использовать все пространство диска.
Временное решение
Для временного решения проблемы используйте один из перечисленных ниже способов в зависимости от требований.

Способ 1.

Определить, какой уровень серьезности
  • Если вы хотите вызвать инструкцию RAISERROR в информационных целях, необходимо использовать уровень серьезности 10 сообщения об ошибке. Уровень серьезности 10 представляет информационное сообщение, которое указывает, что возникла ошибка, так как пользователь ввел неправильные данные.
  • Если требуется прервать выполнение пакета при вызове инструкции RAISERROR, необходимо использовать уровень серьезности 20 или выше сообщения об ошибке, и необходимо указать параметр WITH LOG с помощью инструкции RAISERROR. При этом все инструкции языка Transact-SQL, которые предполагается, что после вызова инструкции RAISERROR прерываются и все открытые операции автоматически отменяются.

    Для получения дополнительных сведений об уровнях серьезности в разделе «Уровни серьезности ошибок сообщений» в электронной документации по SQL Server.

Способ 2

С помощью файла сценария в шаге задания
Если требуется, чтобы весь сценарий для выполнения независимо от того, как часто вызывается инструкция RAISERROR, уровень серьезности будет меньше 20 можно использовать файл сценария в шаге задания. Для этого выполните следующие действия::
  1. Сохраните сценарий в файле.
  2. Создать задание агента SQL Server с шага задания CmdExec и запустите файл сценария в действии.

    Ниже приведен пример:
    osql -E -i c:\script.sql
При использовании файла сценария, вы получите тот же результат, если пакет выполняется с помощьюosqlСлужебная программа, которая появляется при выполнении пакета с помощью SQL Query Analyzer.

Вызов оператора RAISERROR с уровнем серьезности 20 или выше с параметром WITH LOG приводит, подключение закрывается и все инструкции, которые предполагается, что после вызова инструкции RAISERROR, пропускаются.
Статус
Корпорация Майкрософт подтверждает, что это проблема в продуктах Майкрософт, перечисленных в разделе «Применяется к».. Впервые эта проблема была исправлена в SQL Server 2000 с пакетом обновления 4.
Дополнительная информация
Если уровень серьезности сообщения об ошибке в шаге задания агента SQL Server инструкции RAISERROR 2 до 9, задания и задания шаг завершения с ошибкой результат. Тем не менее выходные данные инструкции, выполняемые после инструкции RAISERROR в пакете не подавляется.

Если уровень серьезности ошибки сообщения в инструкции RAISERROR инструкция является 10, 1 или 0, задания и успешно выполняется шаг задания. Таким образом проблемы, описанной в разделе «Проблема» данной статьи не происходит.

Несмотря на то, что задание агента SQL Server завершается неудачей, если выполнение одного и того же сценария SQL с помощью анализатора запросов SQL,ISQLСлужебная программа, илиosqlпрограммы, вы получите результат, который предполагается.

Действия по воспроизведению поведения

  1. Создать новое задание агента SQL Server с помощьюСценарий Transact-SQL (TSQL)шаг задания.
  2. Введите или вставьте следующую инструкцию Transact-SQL вКоманда:поле.
       select convert(varchar(50), @@version) as ' SQL Server Version Number'   raiserror('Test raiserror with severity 10', 10, 1)   select id, convert(varchar(12), name) as 'Table Name'     from sysobjects where id < 4
  3. в менювкладка «Дополнительно».вкладки в областиПараметры команды сценария Transact-SQL (TSQL)Тип разделаC:\Raiserror.logВ диалоговом окнеВыходной файлполе.
  4. Для выбораДобавитьпараметр.
  5. затем –Применениеи выберите командуOk..
  6. затем –Применениеи выберите командуOk..
  7. В SQL Server Enterprise Manager, щелкните правой кнопкой мыши SQL Server, агент задания, в котором был создан, а затем нажмитеЗапуск заданий.
  8. Запуск трассировки SQL Profiler.
  9. Для одного и того же шага задания агента SQL Server установите уровень серьезности 11 путем замены команды в шаге задания следующим образом.
       select convert(varchar(50), @@version) as ' SQL Server Version Number'   raiserror('Test raiserror with severity 11', 11, 1)   select id, convert(varchar(12), name) as 'Table Name'     from sysobjects where id < 4
  10. Запустите задание повторно.
Ниже приведен результат, который создается в файле Raiserror.log.
Job 'raiserror' : Step 1, 'test raiserror' : Began Executing 2002-07-23 15:48:59SQL Server Version Number                         --------------------------------------------------Microsoft SQL Server  2000 - 8.00.534 (Intel x86) (1 rows(s) affected)Test raiserror with severity 10 [SQLSTATE 01000]id          Table Name  ----------- ------------1           sysobjects2           sysindexes3           syscolumns(3 rows(s) affected)Job 'raiserror' : Step 1, 'test raiserror' : Began Executing 2002-07-23 15:49:17SQL Server Version Number                         --------------------------------------------------Microsoft SQL Server  2000 - 8.00.534 (Intel x86) (1 rows(s) affected)Msg 50000, Sev 11: Test raiserror with severity 11 [SQLSTATE 42000]

В этом файле Raiserror.log можно увидеть с уровнем серьезности 10, все выходные данные из задания печати в выходном файле, что задание было успешного результата.

In this Raiserror.log file, you can see that with a severity level of 11, only the output from the first two statements was printed to the output file, and the job had a failed result. Also, the RAISERROR message is in an error message format instead of in an informational format of a severity level 10. The trace file shows that all the statements ran successfully.

If you change the severity level to a number from 2 through 9, the output is not suppressed and the job result will fail for the step and for the job. The message format will be the same as an error message format for severity level 11 or higher.

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 309802 — последний просмотр: 12/07/2015 07:59:21 — редакция: 2.0

Microsoft SQL Server 2000 Developer Edition, Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 2000 Enterprise Edition, Microsoft SQL Server 2000 Personal Edition, Microsoft SQL Server 2000 Workgroup Edition

  • kbnosurvey kbarchive kbhotfixserver kbqfe kbsqlserv2000presp4fix kbfix kbbug kbpending kbmt KB309802 KbMtru
Отзывы и предложения