FIX: Volanie RAISERROR vyhlásenie v dávke Transact-SQL môže spôsobiť SQLAgent prácu zlyhať a stratiť výstup v SQL Server

Preklady článku Preklady článku
ID článku: 309802 - Zobraziť produkty, ktorých sa tento článok týka.
Dôležité Tento článok obsahuje informácie o tom, ako upraviť databázu registry. Presvedčte sa, či chcete zálohovať register pred úpravou je. Uistite sa, že viete, ako obnoviť databázu registry, ak sa vyskytne problém. Ďalšie informácie o zálohovaní, obnovení a úprave databázy registry získate po kliknutí na nasledovné číslo článku databázy Microsoft Knowledge Base:
256986 Popis databázy registry systému Microsoft Windows
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

PRIZNAKY

Keď je typ SQLAgent úloha krok Transact-SQL skript, a keď vyhlásenia v Príkaz pole nový Úloha krok-<SQL server="" instance="" name=""></SQL> dialógové okno volať Transact-SQL RAISERROR vyhlásenie s závažnosti alebo vyššej bez možnosti denníka s úrovni 11, zamestnanie skončí s výsledkom zlyhalo. Avšak, hoci všetky Transact-SQL výkazy spustiť po RAISERROR vyhlásenie hovoru beží, celý výstup je zastavená. Preto žiadny výstup je generovaný pre vyhlásenia po RAISERROR vyhlásenie beží. To môže naozaj spôsobiť zmätok o čo sa stalo s vyhlásenia v zamestnaní. SQL Profiler stopových musí pozrieť, ak chcete vidieť čo vlastne bežala. Ďalšie informácie o SQL Profiler stopových, pozri "SQL Profiler" tému v zdroji SQL Server Books Online.

RIESENIE

Upozornenie Ak databázu registry upravíte nesprávne pomocou editora databázy Registry alebo pomocou inej metódy, môžu nastať vážne problémy. Tieto problémy môžu vyžadovať preinštalovanie operačného systému. Spoločnosť Microsoft nemôže zaručiť, že je možné vyriešiť tieto problémy. Úpravu databázy registry na vlastné riziko.

Service pack informácie

Chcete vyriešiť tento problém, zaobstarajte najnovší balík service pack pre Microsoft SQL Server 2000. Ďalšie informácie získate po kliknutí na nasledovné číslo článku databázy Microsoft Knowledge Base:
290211 Ako získať najnovší balík SQL Server 2000 service pack

Informácie o rýchlej oprave

Anglická verzia tejto rýchlej opravy má atribúty súborov (alebo novšie atribúty) uvedené v nasledujúcej tabuľke. Dátumy a časy jednotlivých súborov sú uvedené v Coordinated Universal Time (UTC). Keď zobrazíte informácie o súbore, sa skonvertuje na miestny čas. Ak chcete vyhľadať rozdiely medzi časom UTC a miestnym časom, použite Časové pásmo kartu v nástroji dátum a čas v ovládacom paneli.
   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
Poznámka Z dôvodu závislostí súboru, najnovšie rýchlu opravu alebo funkcia ktorý obsahuje tieto súbory môžu obsahovať aj ďalšie súbory.

Po použití tejto rýchlej opravy, SQL Server Agent správanie je definovaná novej databázy registry hodnotu DWORD, ktorý sa nazýva TruncateJobResultOnError v jednom z nasledovných podkľúčov databázy registry:
  • HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\MSSQLServer\SQLServerAgent (predvolenú inštanciu)
  • HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\<InstanceName>\SQLServerAgent (s názvom inštancie)</InstanceName>
S cieľom umožniť nové správanie, túto TruncateJobResultOnError hodnotu nastaviť na 0. Po reštartovaní SQL Server Agent, pracovných výsledkov sa skráti už Autor raiserror vyhlásenia. Chcete obnoviť staršie správanie, môžete nastaviť hodnotu TruncateJobResultOnError 1. Toto je predvolená hodnota, ak hodnota nie je nastavená.

Upozornenie Zmeny hodnoty 0 nemožno účinný prístup, ak existuje skript, ktorý má nekonečnej slučke s chyba je hodený. Agent zapíše chybu plynulo a môžu používať všetky miesta na disku.

RIEŠENIE

Obísť tento problém, použite jeden z nasledujúcich metódy založené na vaše požiadavky.

Metóda 1

Určiť, aká úroveň závaţnosti chcete použiť
  • Ak chcete volať RAISERROR výkaz na informačné účely, musíte použiť úroveň závaţnosti 10 pre chybové hlásenie. Závažnosť úroveň 10 predstavuje informačná správa, ktorá naznačuje, že problém sa chyba, pretože zadané nesprávne informácie.
  • Ak chcete prerušiť dávka pri RAISERROR vyhlásenie je názvom, musíte použiť závažnosti alebo vyššej úrovni 20 pre chybové hlásenie a musia zahŕňať parameter s denníka s vyhlásením RAISERROR. Keď ste to tak, že všetky Transact-SQL vyhlásenia, že boli vraj spustiť po výzve k RAISERROR výkazu prerušená a sú otvorené transakcie automaticky valcované späť.

    Ďalšie informácie o závažnosti úrovniach, pozri "chyba Hlásenie úroveň závažnosti"tému v zdroji SQL Server Books Online.

Metóda 2

Použiť súbor skriptu v kroku projektu
Ak chcete celý skript pre vykonanie bez ohľadu na ako často sa nazýva RAISERROR vyhlásenie a úroveň závaţnosti je menej ako 20, môžete použiť súbor skriptu v kroku projektu. Tak chcete urobiť, postupujte podľa týchto kroky:
  1. Uložiť skript v súbore.
  2. Vytvorenie úlohy SQL Server Agent s CmdExec úloha krok, a potom spustite súbor skriptu v kroku.

    Tu je príklad:
    osql -E -i c:\script.sql
Ak chcete použiť súbor skriptu, dostanete rovnaký výsledok, ak dávka je spustený pomocou osql pomôcky, ktoré dostanete, ak dávka je spustený pomocou SQL Query Analyzátor.

Volanie RAISERROR vyhlásenie s úroveň závaţnosti 20 alebo vyššie s možnosťou S LOG spôsobuje pripojenie k úzkej a všetky výpisy, ktoré boli mal plynúť po RAISERROR hovoru sú vynechané.

STAV

Spoločnosť Microsoft potvrdila, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v časti „vzťahuje sa na". Tento problém bol opravený v Microsoft SQL Server 2000 Service Pack 4.

DALSIE INFORMACIE

Ak úroveň závaţnosti chyby správu v SQL Server Agent úloha krok RAISERROR výkazu je 2 až 9, prácu a úloha krok koniec s zlyhalo výsledkom. Však nie je zastavená výstup pre vyhlásenia, ktoré sa spúšťajú po RAISERROR vyhlásenie v dávke.

Ak úroveň závaţnosti chyby správu v RAISERROR vyhlásenie je 10, 1 alebo 0, prácu a prácu krok beží úspešne. Preto sa problém, ktorý je uvedený v časti „príznaky"tohto článok sa nevyskytuje.

Hoci SQL Server Agent prácu zlyhá, ak ste spustiť rovnaký scenár SQL pomocou analyzátor dotazu SQL, isql pomôcku, alebo osql pomôcka, dostanete výsledok, ktorý očakávate.

Kroky na reprodukovanie správanie

  1. Vytvoriť novú úlohu SQL Server Agent sTransact-SQL skript (TSQL) úloha krok.
  2. Zadajte alebo prilepte nasledujúce vyhlásenie Transact-SQL vPríkaz rámček.
       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. Na Rozšírené kartu pod Príkaz skriptu Transact-SQL (TSQL) možnosti sekcia, typu C:\Raiserror.log vVýstupný súbor rámček.
  4. Kliknutím vyberte možnosť Pripojiť možnosť.
  5. Kliknite na tlačidlo Uplatňovať, a potom kliknite na tlačidlook.
  6. Kliknite na tlačidlo Uplatňovať, a potom kliknite na tlačidlook.
  7. V SQL Server Enterprise Manager kliknite pravým tlačidlom myši SQL Server Agent prácu, ktorý bol vytvorený, a potom kliknite na Štart Úloha.
  8. Začať SQL Profiler sledovania.
  9. Pre rovnaký stupeň SQL Server Agent prácu, zmena úroveň závaţnosti 11 nahradením príkazu v kroku projektu takto.
       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. Úlohu spustiť znova.
Tu je výsledok, ktorý sa vytvára v súbore 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]

V tomto Raiserror.log súbore, môžete vidieť, že s závažnosti úroveň 10, výstup z projektu bola vytlačená v výstupného súboru, a prácu mal úspešný výsledok.

V tomto súbore Raiserror.log vám môžete vidieť, že s úroveň závaţnosti 11, len výstup z prvé dve vyhlásenia bola vytlačená výstupného súboru a prácu mal zlyhalo výsledok. Tiež RAISERROR správy je vo formáte chybové hlásenie namiesto o v informačné formát úroveň závaţnosti 10. Súbor sledovania vyplýva, že všetky výkazy úspešne prebehla.

Ak zmeníte úroveň závaţnosti na číslo od 2 do 9, výstup nie je zastavená a prácu výsledok bude zlyhať na krok a pre túto prácu. Formát správy budú rovnaké ako chybové hlásenie formát pre úroveň závaţnosti 11 alebo vyššia.

Vlastnosti

ID článku: 309802 - Posledná kontrola: 1. novembra 2011 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • 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
Kľúčové slová: 
kbhotfixserver kbqfe kbsqlserv2000presp4fix kbfix kbbug kbpending kbmt KB309802 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:309802

Odošlite odozvu

 

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