1.Apa yang dimaksud dengan prosedur tersimpan?
Prosedur tersimpan dikompilasi satu kali dan dapat dijalankan beberapa kali (prosedur tersimpan disimpan di server). Ini adalah koleksi yang telah dikompilasi sebelumnya dan berjalan dengan cepat.
2. Prosedur tersimpan sistem yang umum digunakan
kode
-- Tujuan: Prosedur tersimpan sistem yang umum digunakan
EXEC sp_databases --Daftar database di sistem saat ini
EXEC sp_renamdb 'test','test1'--Mengubah nama database (akses pengguna tunggal)
GUNAKAN studiDB
PERGI
EXEC sp_tables --Daftar objek yang ditanyakan dalam database saat ini
EXEC sp_columns stuInfo --mengembalikan informasi tentang kolom tabel
EXEC sp_help stuInfo --Lihat informasi tabel stuInfo
EXEC sp_helpconstraint stuInfo --Lihat batasan tabel stuInfo
EXEC sp_helpindex stuMarks --Melihat indeks tabel stuMarks
EXEC sp_helptext 'view_stuInfo_stuMarks' --Lihat teks pernyataan tampilan
EXEC sp_stored_procedures --mengembalikan daftar prosedur tersimpan dalam database saat ini
gunakan tuan
pergi
exec xp_cmdshell 'mkdir D:bank',no_output--Buat folder
3. Prosedur tersimpan khusus
(1.) Prosedur tersimpan tanpa parameter
kode
gunakan tiang
pergi
jika ada(pilih * dari sysobjects di mana nama='proc_stu')
jatuhkan proc proc_stu
pergi
buat prosedur proc_stu
SEBAGAI
DECLARE @writeAvg float,@labAvg float --Variabel skor rata-rata tes tertulis dan tes komputer
PILIH @writeAvg=AVG(writeExam), @labAvg=AVG(labExam) DARI stuMarks
print 'Skor rata-rata dalam tes tertulis:'+convert(varchar(5),@writeAvg)
print 'Skor rata-rata tes komputer:'+convert(varchar(5),@labAvg)
JIKA (@writeAvg>70 DAN @labAvg>70)
print 'Hasil ujian kelas ini: Luar Biasa'
KALAU TIDAK
print 'Hasil ujian kelas ini: buruk'
cetak '------------------------------------------------ --'
print 'Siswa yang tidak lulus ujian ini:'
PILIH stuName,stuInfo.stuNo,ujian tertulis,ujian lab DARI stuInfo
DALAM BERGABUNG dengan stuMarks DI stuInfo.stuNo=stuMarks.stuNo
DIMANA Ujian tertulis<60 ATAU Ujian lab<60
PERGI
exec proc_stu --Jalankan prosedur tersimpan (2.) Prosedur tersimpan dengan parameter input
kode
GUNAKAN studiDB
PERGI
/*---Deteksi apakah ada: prosedur tersimpan disimpan di tabel sistem sysobjects---*/
JIKA ADA (PILIH * DARI sysobjects WHERE name = 'proc_stu' )
JATUHKAN PROSEDUR proc_stu
PERGI
/*---Buat prosedur tersimpan----*/
BUAT PROSEDUR proc_stu
@writePass ke dalam,
@labPass int-- Anda dapat menambahkan nilai default sehingga eksekusinya bisa seperti ini exec proc_stu tanpa menentukan parameter.
SEBAGAI
print 'Tanda kelulusan tertulis:'+convert(varchar(5),@writePass)
print 'Garis kelulusan tes komputer:'+convert(varchar(5),@labPass)
cetak '------------------------------------------------ --'
print 'Siswa yang tidak lulus ujian ini:'
PILIH stuName,stuInfo.stuNo,ujian tertulis,ujian lab DARI stuInfo
DALAM BERGABUNG dengan stuMarks DI stuInfo.stuNo=stuMarks.stuNo
DIMANA Ujian tertulis<@writePass ATAU ujian lab<@labPass
PERGI
eksekutif proc_stu 60,55
exec proc_stu 60,@labPass=55
exec proc_stu @writePass=60,@labPass=55
exec proc_stu @writePass=60,55--Baris ini akan melaporkan kesalahan: parameter 2 harus diteruskan, dan parameter selanjutnya harus diteruskan dalam bentuk '@nama = nilai'.
-- Setelah formulir '@nama = nilai' digunakan, semua parameter berikutnya harus diteruskan dalam formulir '@nama = nilai'
(3.) Prosedur tersimpan dengan parameter keluaran
kode
GUNAKAN studiDB
PERGI
/*---Deteksi apakah ada: prosedur tersimpan disimpan di tabel sistem sysobjects---*/
JIKA ADA (PILIH * DARI sysobjects WHERE name = 'proc_stu' )
JATUHKAN PROSEDUR proc_stu
PERGI
/*---Buat prosedur tersimpan----*/
BUAT PROSEDUR proc_stu
@notpassSum int OUTPUT, --OUTPUT kata kunci, jika tidak maka dianggap sebagai parameter input
@writePass int=60, --Parameter default diletakkan setelahnya
@labPass int=60 --Parameter default diletakkan setelahnya
SEBAGAI
print 'Tanda kelulusan tertulis:'+convert(varchar(5),@writePass)
+ 'Garis kelulusan tes berbasis komputer:'+convert(varchar(5),@labPass)
cetak '------------------------------------------------ --'
print 'Siswa yang tidak lulus ujian ini:'
PILIH stuName,stuInfo.stuNo,ujian tertulis,ujian lab DARI stuInfo
DALAM BERGABUNG dengan stuMarks DI stuInfo.stuNo=stuMarks.stuNo
DIMANA Ujian tertulis<@writePass ATAU ujian lab<@labPass
/*--Hitung dan kembalikan jumlah siswa yang gagal dalam ujian--*/
PILIH @notpassSum=COUNT(stuNo)DARI stuMarks
DIMANA Ujian tertulis<@writePass ATAU ujian lab<@labPass
PERGI
/*---Panggilan prosedur tersimpan----*/
DEKLARASIKAN @jumlah int
EXEC proc_stu @sum OUTPUT ,64 --Nilai kelulusan untuk tes komputer menggunakan nilai default: nilai kelulusan untuk tes tertulis adalah 64 poin, dan nilai kelulusan untuk tes komputer adalah 60 poin.
cetak '------------------------------------------------ --'
JIKA @jumlah>=3
print 'Jumlah orang yang gagal:'+convert(varchar(5),@sum)+ 'Orang, lebih dari 60%, nilai kelulusannya harus diturunkan'
KALAU TIDAK
print 'Jumlah orang yang gagal:'+convert(varchar(5),@sum)+ 'Orang, telah dikontrol di bawah 60%, dan nilai kelulusannya sedang'
PERGI