Update: Ein Aufruf einer RAISERROR-Anweisung in einem Transact­SQL-Batch kann ein Auftrag SQLAgent fehlschlagen und Ausgabe in SQL Server verlieren verursachen

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 309802 - Produkte anzeigen, auf die sich dieser Artikel bezieht
wichtig Dieser Artikel enthält Informationen zum Ändern der Registrierung. Sollten Sie die Registrierung sichern, bevor Sie Sie ändern. Stellen Sie sicher, dass Sie die Registrierung wiederherstellen kennen, wenn ein Problem auftritt. Weitere Informationen zum Sichern, Wiederherstellen und Bearbeiten der Registrierung finden Sie im folgenden Artikel der Microsoft Knowledge Base:
256986Beschreibung der Microsoft Windows-Registrierung
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Wenn ein Schritt Auftrag SQLAgent Transact-SQL-Skript ist, und die Anweisungen im Feld Befehl neu Auftragsschritt-< Name der SQL Server-Instanz > Dialogfeld Feld Aufruf einer Transact-SQL-RAISERROR-Anweisung mit einem Schweregrad von 11 oder höher, ohne die Option WITH LOG, die Auftrag endet mit dem fehlerhaften Ergebnis. Obwohl Transact-SQL-Anweisungen nach der Anweisung RAISERROR Ausführung aller führt aufrufen, wird die Ausgabe unterdrückt. Daher keine Ausgabe generiert für die Anweisungen nach der RAISERROR-Anweisung ausgeführt wird. Dies kann tatsächlich Verwirrungen den Anweisungen in einem Auftrag wo führen. Sie müssen eine SQL Profiler-Ablaufverfolgung betrachten, wenn finden Sie unter Was tatsächlich ausgeführt werden soll. Weitere Informationen über eine SQL Profiler-Ablaufverfolgung finden Sie "SQL Profiler" in der SQL Server-Onlinedokumentation.

Lösung

Warnung Schwerwiegende Probleme können auftreten, wenn Sie die Registrierung falsch mithilfe des Registrierungs-Editors oder mithilfe einer anderen Methode ändern. Diese Probleme erfordern möglicherweise eine Ihr Betriebssystem neu installieren. Microsoft kann nicht garantieren, dass diese Probleme gelöst werden können. Ändern Sie die Registrierung auf eigene Gefahr.

Informationen zu Service Packs

Installieren Sie das neueste Service Pack für Microsoft SQL Server 2000, um dieses Problem zu beheben. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
290211So erhalten Sie das neueste Service Pack für SQL Server 2000

Hotfix-Informationen

Die englische Version dieses Hotfixes weist die Dateiattribute (oder höher Dateiattribute), die in der folgenden Tabelle aufgelistet werden. Die Datums- und Uhrzeitangaben für diese Dateien sind in Coordinated Universal Time (UTC) angegeben. Wenn Sie sich die Dateiinformationen ansehen, werden diese Angaben in die lokale Zeit konvertiert. Um die Differenz zwischen UTC und der Ortszeit zu ermitteln verwenden Sie die Registerkarte Zeitzone des Tools ? Datum und Uhrzeit in der Systemsteuerung.
   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
Hinweis: Aufgrund von Dateiabhängigkeiten enthält das aktuellste Update oder Feature, das diese Dateien enthält, möglicherweise auch weitere Dateien.

Nachdem Sie diesen Hotfix angewendet haben, wird SQL Server-Agent-Verhalten durch einen neuen DWORD-Registrierungswert definiert, die TruncateJobResultOnError in einem der folgenden Unterschlüssel in der Registrierung aufgerufen wird:
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQLServer\SQLServerAgent (default instance)
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceName>\SQLServerAgent (named instance)
Um das neue Verhalten zu aktivieren, legen Sie diesen TruncateJobResultOnError-Wert auf 0. Nach dem Neustart der SQL Server-Agent werden Auftrag Ergebnisse nicht mehr von Raiserror Anweisungen abgeschnitten. Um ältere Verhalten wiederherzustellen, können Sie den TruncateJobResultOnError Wert auf 1 festlegen. Dies ist der Standardwert, wenn der Wert nicht festgelegt ist.

Warnung Die Wertänderung 0 möglicherweise keinen effektiven Ansatz, wenn ein Skript, das eine Endlosschleife mit Fehler ausgelöst hat. Agent kontinuierlich protokolliert den Fehler und aller den Speicherplatz verwenden kann.

Abhilfe

Um zu das Problem zu umgehen, verwenden Sie entweder eine der folgenden Methoden, je nach Ihren Anforderungen.

Methode 1

Bestimmen Sie, welche Schweregrad Stufe, die Sie verwenden möchten
  • Wenn Sie eine RAISERROR-Anweisung für Informationszwecke aufrufen möchten, müssen Sie mit einem Schweregrad von 10 für die Fehlermeldung verwenden. Mit einem Schweregrad von 10 stellt eine informative Nachricht, die angibt, dass ein Problem, aufgetreten da der Benutzer falschen Informationen eingegeben dar.
  • Soll den Stapel abgebrochen, wenn eine RAISERROR-Anweisung aufgerufen wird, müssen müssen Sie mit einem Schweregrad von 20 oder höher für die Fehlermeldung, und Sie die Option WITH LOG mit der Anweisung RAISERROR. Wenn Sie dies tun, werden alle Transact-SQL-Anweisungen, die nach der Aufruf der RAISERROR-Anweisung abgebrochen werden ausgeführt wurden, und die offenen Buchungen automatisch ein Rollback.

    Weitere Informationen über die Schweregrade finden Sie "Fehler Message Severity Levels" in der SQL Server-Onlinedokumentation.

Methode 2

Verwenden Sie eine Skriptdatei in der Auftrag-Schritt
Wenn Sie das gesamte Skript ausführen, unabhängig davon, wie häufig die RAISERROR-Anweisung aufgerufen wird, und der Schweregrad kleiner als 20 ist, können Sie eine Skriptdatei in der Auftrag-Schritt verwenden. Gehen Sie dazu folgendermaßen vor:
  1. Speichern Sie das Skript in einer Datei.
  2. Erstellen Sie eine SQL Server Agent-Auftrag mit einem CmdExec-Auftrag-Schritt, und führen Sie die Skriptdatei in der Schritt.

    Hier ist ein Beispiel:
    osql -E -i c:\script.sql
Wenn Sie eine Skriptdatei verwenden, erhalten Sie dasselbe Ergebnis, wenn die Stapelverarbeitung ausgeführt wird, mit das Dienstprogramm Osql , das Sie wenn die Stapelverarbeitung ausgeführt wird, mithilfe von SQL Query Analyzer erhalten.

Aufrufen einer RAISERROR-Anweisung mit einem Schweregrad von 20 oder höher mit der Option WITH LOG bewirkt, dass das Schließen der Verbindung und alle Anweisungen, die nach der RAISERROR-Aufruf übersprungen werden ausgeführt wurden.

Status

Microsoft hat bestätigt, dass dies ein Problem in Microsoft-Produkten handelt, die im Abschnitt "Gilt für" aufgeführt sind. Dieses Problem wurde erstmals im Microsoft SQL Server 2000 Service Pack 4.

Weitere Informationen

Wenn der Schweregrad der Fehlermeldung in SQL Server Agent-Auftrag-Schritt der RAISERROR-Anweisung 2 bis 9 ist, am Ende der Auftrag und Auftrag Schritt eines Fehler beim Ergebnis. Die Ausgabe wird jedoch nicht für die Anweisungen unterdrückt, die nach der RAISERROR-Anweisung im Batch ausgeführt werden.

Wenn der Schweregrad Fehlermeldung in der RAISERROR-Anweisung aufweist 10, 1 oder 0, die Auftrag und Auftrag-Schritt wird erfolgreich ausgeführt. Daher tritt das Problem, das im Abschnitt "Problembeschreibung" dieses Artikels genannt wird nicht auf.

Obwohl die SQL Server Agent-Auftrag, fehlschlägt Wenn Sie dieselbe SQL-Skript mithilfe von SQL Query Analyzer, das Dienstprogramm Isql oder das Dienstprogramm Osql ausführen, erhalten Sie das Ergebnis, das Sie erwarten.

Schritte zum Reproduzieren des Verhaltens

  1. Erstellen Sie eine neue SQL Server Agent Auftrag mit einem Transact-SQL Script (TSQL) Auftrag Schritt.
  2. Type or Paste the following Transact-SQL Statement in the Command Box.
       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. Geben Sie auf der Registerkarte Erweitert unter dem Abschnitt Transact-SQL-Skript (TSQL) Befehlsoptionen C:\Raiserror.log im Feld Ausgabedatei .
  4. Klicken Sie auf die Option Anfügen .
  5. Klicken Sie auf Übernehmen , und klicken Sie dann auf OK .
  6. Klicken Sie auf Übernehmen , und klicken Sie dann auf OK .
  7. Klicken Sie in SQL Server Enterprise Manager mit der rechten Maustaste auf die SQL Server Agent-Auftrag, die erstellt wurde, und klicken Sie dann auf Auftrag starten .
  8. Starten Sie SQL Profiler-Ablaufverfolgung.
  9. For the same SQL Server Agent Job Step, Change the Severity Level to 11 by replacing the Command in the Job Step as follows.
       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. Führen Sie die Auftrag erneut aus.
Hier ist das Ergebnis, das in der raiserror.log-Datei generiert wird.
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]

In dieser Datei raiserror.log sehen Sie sich, dass mit einem Schweregrad von 10, wurde die Ausgabe aus der Auftrag in der Ausgabedatei gedruckt, und der Auftrag ein erfolgreiches Ergebnis hatte.

In dieser Datei raiserror.log sehen Sie sich, dass mit einem Schweregrad von 11, nur die Ausgabe von den ersten beiden Anweisungen in die Ausgabedatei gedruckt wurde, und die Auftrag ein Fehler beim Ergebnis hatte. Darüber hinaus ist die RAISERROR-Nachricht in einem Format Fehlermeldung statt in einem informativen Format mit einem Schweregrad 10. Die Ablaufverfolgungsdatei zeigt an, dass alle Anweisungen, die erfolgreich ausgeführt wurde.

Wenn Sie den Schweregrad in eine Zahl von 2 bis 9 ändern, die Ausgabe wird nicht unterdrückt, und das Ergebnis von Auftrag schlägt fehl, für die Schritt und die Auftrag. Das Format der Nachricht wird ein Fehlermeldung-Format für Schweregrad 11 oder höher identisch sein.

Eigenschaften

Artikel-ID: 309802 - Geändert am: Freitag, 2. November 2007 - Version: 5.5
Die Informationen in diesem Artikel beziehen sich auf:
  • 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
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
  • Microsoft SQL Server 2000 Enterprise Edition 64-bit
Keywords: 
kbmt kbhotfixserver kbqfe kbqfe kbsqlserv2000presp4fix kbfix kbbug kbpending KB309802 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 309802
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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