FIX: Panggilan untuk pernyataan RAISERROR dalam batch Transact-SQL dapat menyebabkan SQLAgent pekerjaan gagal dan kehilangan output dalam SQL Server

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 309802 - Melihat produk di mana artikel ini berlaku.
Penting Artikel ini berisi informasi tentang cara mengubah registri. Pastikan untuk membuat cadangan registri sebelum Anda memodifikasinya. Pastikan Anda mengetahui cara memulihkan registri jika terjadi masalah. Untuk informasi selengkapnya tentang cara membuat cadangan, memulihkan, dan mengubah registri, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
256986 Deskripsi registri Microsoft Windows
Perbesar semua | Perkecil semua

Pada Halaman ini

GEJALA

Ketika SQLAgent pekerjaan langkah jenis Transact-SQL script, dan Ketika pernyataan dalam Perintah bidang baru Pekerjaan langkah-<sql server="" instance="" name=""></sql> kotak dialog panggilan pernyataan Transact-SQL RAISERROR dengan keparahan tingkat 11 atau lebih tinggi tanpa pilihan dengan LOG, pekerjaan akan berakhir dengan hasil gagal. Namun, meskipun semua pernyataan Transact-SQL menjalankan Setelah pernyataan RAISERROR memanggil berjalan, semua output ditekan. Oleh karena itu, tidak ada keluaran yang dihasilkan untuk pernyataan setelah RAISERROR pernyataan berjalan. Ini benar-benar dapat menyebabkan kebingungan tentang apa yang terjadi pernyataan dalam pekerjaan. Anda harus melihat jejak SQL Profiler jika Anda ingin melihat apa benar-benar berlari. Untuk informasi lebih lanjut tentang jejak SQL Profiler, lihat "SQL Profiler" topik dalam SQL Server buku Online.

PEMECAHAN MASALAH

Warning Masalah serius mungkin muncul jika Anda memodifikasi registri secara tidak benar dengan menggunakan Peninjau Suntingan Registri atau metode lainnya. Masalah ini mungkin mengharuskan Anda untuk memasang ulang sistem operasi. Microsoft tidak dapat menjamin bahwa masalah ini dapat diatasi. Ubah registri atas risiko Anda sendiri.

Informasi paket layanan

Untuk memecahkan masalah ini, Dapatkan paket layanan terbaru untuk Microsoft SQL Server 2000. Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
290211 Cara mendapatkan paket layanan SQL Server 2000

Informasi hotfix

Versi bahasa Inggris dari hotfix ini memiliki atribut berkas (atau atribut berkas yang lebih baru) yang tercantum dalam tabel berikut. Tanggal dan waktu untuk berkas-berkas tersebut dicantumkan dalam Coordinated Universal Time (UTC). Apabila Anda melihat informasi berkas, tanggal akan diubah ke waktu lokal. Untuk menemukan perbedaan waktu UTC dan waktu lokal, gunakan Zona waktu tab pada alat tanggal dan waktu dalam Panel kontrol.
   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
Catatan File dependensi, perbaikan terbaru yang terbaru atau fitur yang berisi ini file juga berisi tambahan file.

Setelah Anda menerapkan perbaikan terbaru ini, SQL Server agen perilaku ditentukan oleh registri baru nilai DWORD yang disebut TruncateJobResultOnError di salah satu subkunci registri berikut:
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQLServer\SQLServerAgent (default contoh)
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<instancename>\SQLServerAgent (bernama contoh)</instancename>
Untuk mengaktifkan perilaku baru, menetapkan nilai TruncateJobResultOnError ini ke 0. Setelah Anda me-restart SQL Server agen, hasil pekerjaan tidak lagi dapat dipotong oleh raiserror pernyataan. Untuk memulihkan perilaku warisan, Anda dapat mengatur nilai TruncateJobResultOnError ke 1. Ini adalah nilai default jika nilai tidak diatur.

Warning Perubahan nilai 0 tidak mungkin pendekatan efektif ketika script yang telah loop tak terbatas dengan kesalahan yang dilemparkan. Agen log kesalahan terus-menerus dan mungkin menggunakan semua ruang disk.

TEKNIK PEMECAHAN MASALAH

Untuk mengatasi masalah, gunakan salah satu dari berikut metode, berdasarkan kebutuhan Anda.

Metode 1

Menentukan apa tingkat keparahan yang ingin Anda gunakan
  • Jika Anda ingin menghubungi pernyataan RAISERROR untuk informasi tujuan, Anda harus menggunakan tingkat keparahan 10 untuk pesan galat. Keparahan tingkat 10 mewakili pesan informasi yang menunjukkan bahwa masalah terjadi karena pengguna memasukkan informasi yang salah.
  • Jika Anda ingin membatalkan batch ketika pernyataan RAISERROR ini disebut, Anda harus menggunakan keparahan tingkat 20 atau lebih tinggi untuk pesan galat, dan Anda harus menyertakan opsi dengan LOG dengan pernyataan RAISERROR. Ketika Anda Jadi, semua pernyataan Transact-SQL yang seharusnya untuk menjalankan setelah panggilan untuk RAISERROR pernyataan dibatalkan, dan semua transaksi terbuka secara otomatis memutar ulang.

    Untuk informasi lebih lanjut tentang keparahan tingkat, lihat "kesalahan Pesan tingkat keparahan"topik dalam SQL Server buku Online.

Metode 2

Menggunakan file script di langkah pekerjaan
Jika Anda ingin seluruh script untuk melaksanakan terlepas dari Bagaimana sering pernyataan RAISERROR disebut, dan tingkat keparahan kurang dari 20, Anda dapat menggunakan file script di langkah pekerjaan. Untuk melakukannya, ikuti langkah-langkah:
  1. Menyimpan script dalam file.
  2. Membuat pekerjaan SQL Server agen dengan langkah pekerjaan CmdExec, dan kemudian jalankan file skrip pada langkah.

    Berikut adalah contoh:
    osql -E -i c:\script.sql
Ketika Anda menggunakan script file, Anda akan menerima hasil yang sama jika bets dijalankan dengan menggunakan osql utilitas yang Anda terima jika bets dijalankan dengan menggunakan SQL Query Analisa.

Memanggil RAISERROR pernyataan dengan tingkat keparahan 20 atau lebih tinggi dengan pilihan dengan LOG menyebabkan sambungan untuk menutup, dan semua pernyataan yang seharusnya untuk menjalankan setelah panggilan RAISERROR melewatkan.

STATUS

Microsoft telah mengkonfirmasi bahwa ini adalah masalah di dalam produk Microsoft sebagaimana tercantum di bagian "Berlaku untuk". Masalah ini diperbaiki pertama kali pada Microsoft SQL Server 2000 Paket Layanan 4.

INFORMASI LEBIH LANJUT

Jika tingkat keparahan kesalahan pesan di SQL Server agen pekerjaan langkah pernyataan RAISERROR adalah 2 sampai 9, pekerjaan dan pekerjaan langkah akhir dengan hasil gagal. Namun, output tidak ditekan untuk pernyataan yang dijalankan setelah pernyataan RAISERROR dalam bets.

Jika tingkat keparahan kesalahan pesan di RAISERROR pernyataan adalah 10, 1, atau 0, pekerjaan dan pekerjaan langkah berjalan dengan baik. Oleh karena itu, masalah yang disebutkan di bagian "Gejala" ini Artikel tidak terjadi.

Meskipun pekerjaan SQL Server agen gagal jika Anda menjalankan skrip SQL yang sama dengan menggunakan SQL Query Analyzer, isql utilitas, atau osql utilitas, Anda akan menerima hasil yang Anda harapkan.

Langkah-langkah mereproduksi perilaku

  1. Membuat pekerjaan SQL Server agen baru denganTransact-SQL Script (TSQL) pekerjaan langkah.
  2. Ketik atau tempel pernyataan Transact-SQL berikut diPerintah kotak.
       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. Pada Lanjutan tab, di bawah Perintah Transact-SQL Script (TSQL) pilihan bagian, jenis C:\Raiserror.log dalamOutput file kotak.
  4. Klik untuk memilih Tambahkan pilihan.
  5. Klik Menerapkan, lalu klikOke.
  6. Klik Menerapkan, lalu klikOke.
  7. Dalam SQL Server Enterprise Manager, klik kanan SQL Server agen pekerjaan yang dibuat, dan kemudian klik Mulai Pekerjaan.
  8. Mulai SQL Profiler jejak.
  9. Untuk langkah pekerjaan SQL Server agen yang sama, mengubah tingkat keparahan 11 dengan mengganti perintah di dalam langkah pekerjaan sebagai berikut.
       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. Menjalankan pekerjaan lagi.
Berikut adalah hasil yang dihasilkan pada berkas 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]

Dalam file Raiserror.log ini, Anda dapat melihat bahwa dengan keparahan tingkat 10, semua output dari pekerjaan dicetak di output file, dan pekerjaan memiliki hasil yang sukses.

Dalam file Raiserror.log ini, Anda dapat melihat bahwa dengan tingkat keparahan 11, hanya output dari dua yang pertama pernyataan ini dicetak untuk output file, dan pekerjaan memiliki akibat gagal. Juga, adalah RAISERROR pesan dalam format pesan kesalahan bukannya di informasi format tingkat keparahan 10. Berkas jejak menunjukkan bahwa semua pernyataan berlari berhasil.

Jika Anda mengubah tingkat keparahan untuk nomor dari 2 sampai 9, output tidak ditekan dan hasil pekerjaan akan gagal untuk langkah dan untuk pekerjaan. Format pesan akan sama seperti format pesan kesalahan untuk tingkat keparahan 11 atau lebih tinggi.

Properti

ID Artikel: 309802 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0
Berlaku bagi:
  • 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
Kata kunci: 
kbhotfixserver kbqfe kbsqlserv2000presp4fix kbfix kbbug kbpending kbmt KB309802 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:309802

Berikan Masukan

 

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