Ketika saya menggunakan SQL Server dan ada kesalahan, pesan kesalahan memberikan nomor baris yang tidak berkorelasi dengan nomor baris dalam prosedur tersimpan. Saya berasumsi bahwa perbedaannya adalah karena ruang kosong dan komentar, tetapi benarkah?
Bagaimana saya bisa menghubungkan kedua set nomor baris ini satu sama lain? Jika ada yang bisa memberi saya setidaknya petunjuk ke arah yang benar, saya akan sangat menghargainya.
Saya menggunakan SQL server 2005.
sql
sql-server-2005
chama
sumber
sumber
create proc
garis dalam pengujian saya. Saya berasumsi Anda melihat sesuatu yang berbeda.Jawaban:
IIRC, itu mulai menghitung baris dari awal batch yang membuat proc itu. Itu berarti permulaan skrip, atau pernyataan "GO" terakhir sebelum pernyataan create / alter proc.
Cara yang lebih mudah untuk melihatnya adalah dengan menarik teks sebenarnya yang digunakan SQL Server saat membuat objek. Alihkan output Anda ke mode teks (CTRL-T dengan pemetaan kunci default) dan jalankan
Salin dan tempel hasil ke jendela skrip untuk mendapatkan penyorotan sintaks dll, dan gunakan fungsi garis goto (menurut saya CTRL-G) untuk membuka baris kesalahan yang dilaporkan.
sumber
Di luar kebiasaan yang saya tempatkan
LINENO 0
langsung setelahBEGIN
dalam prosedur tersimpan saya. Ini mengatur ulang nomor baris - menjadi nol, dalam kasus ini. Kemudian tambahkan saja nomor baris yang dilaporkan oleh pesan kesalahan ke nomor baris di SSMS tempat Anda menulisLINENO 0
dan bingo - Anda memiliki nomor baris kesalahan seperti yang ditunjukkan di jendela kueri.sumber
Jika Anda menggunakan Catch Block dan menggunakan RAISERROR () untuk validasi kode dalam Try Block, maka Error Line akan dilaporkan di mana Catch Block berada dan bukan di mana kesalahan sebenarnya terjadi. Saya menggunakannya seperti ini untuk menjernihkannya.
sumber
Sebenarnya ini
Error_number()
bekerja dengan sangat baik.Fungsi ini mulai menghitung dari pernyataan GO (Pemisah Batch) terakhir, jadi jika Anda belum menggunakan spasi Go dan masih menunjukkan nomor baris yang salah - lalu tambahkan 7 ke dalamnya, seperti dalam prosedur tersimpan di baris nomor 7 pemisah batch digunakan secara otomatis. Jadi jika Anda menggunakan pilih Cast (Error_Number () + 7 sebagai Int) sebagai [Error_Number] - Anda akan mendapatkan jawaban yang diinginkan.
sumber
if you have not used any Go spaces and it is still showing a wrong line number - then add 7 to it, as in stored procedure in line number 7 the batch separator is used automatically.
- apa maksudnya ini?Dalam TSQL / Prosedur Tersimpan
Anda mungkin mendapatkan kesalahan seperti:
Ini berarti error ada di baris 177 di batch. Bukan 177 di SQL. Anda harus melihat nomor baris batch Anda dimulai, dalam kasus saya [7], dan kemudian Anda menambahkan nilai itu ke nomor baris untuk menemukan pernyataan apa yang salah
sumber
kamu bisa menggunakan ini
dan jika Anda ingin membuat tabel log kesalahan Anda dapat menggunakan ini:
sumber
Jawaban panjang: nomor baris dihitung dari
CREATE PROCEDURE
pernyataan, ditambah baris kosong atau baris komentar yang mungkin Anda miliki di atasnya ketika Anda benar-benar menjalankanCREATE
pernyataan, tetapi tidak menghitung baris apa pun sebelumGO
pernyataan…Saya merasa jauh lebih mudah untuk membuat proc yang disimpan untuk dimainkan untuk mengonfirmasi:
Setelah Anda membuatnya, Anda dapat mengubahnya
ALTER PROCEDURE
dan menambahkan beberapa baris kosong di atas komentar dan di atas dan di bawahGO
pernyataan pertama untuk melihat efeknya.Satu hal yang sangat aneh yang saya perhatikan adalah bahwa saya harus menjalankan
EXEC ErrorTesting
di jendela kueri baru alih-alih menyorotnya di bagian bawah jendela yang sama dan menjalankan ... Ketika saya melakukannya, nomor baris terus naik! Tidak yakin mengapa itu terjadi ..sumber
Anda bisa mendapatkan pesan kesalahan dan baris kesalahan di blok penangkap seperti ini:
sumber