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

Переводы статьи Переводы статьи
Код статьи: 309802 - Vizualiza?i produsele pentru care se aplic? acest articol.
Существенный:Статья содержит сведения об изменении реестра. Перед изменением реестра необходимо создать его резервную копию.. и изучить процедуру его восстановления.. Для получения дополнительных сведений о способах резервного копирования, восстановления и внесения изменений в реестр, обратитесь к следующей статье 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:59

SQL 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           sysobjects
2           sysindexes
3           syscolumns

(3 rows(s) affected)

Job 'raiserror' : Step 1, 'test raiserror' : Began Executing 2002-07-23 15:49:17

SQL 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 - Последний отзыв: 23 ноября 2010 г. - Revision: 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
Ключевые слова: 
kbhotfixserver kbqfe kbsqlserv2000presp4fix kbfix kbbug kbpending kbmt KB309802 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:309802

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com