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

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
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
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
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: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]

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.

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 309802 – Letzte Überarbeitung: 12/07/2015 07:59:20 – Revision: 5.5

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

  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbqfe kbsqlserv2000presp4fix kbfix kbbug kbpending KB309802 KbMtde
Feedback