1.ขั้นตอนการจัดเก็บคืออะไร?
กระบวนการจัดเก็บจะถูกคอมไพล์เพียงครั้งเดียวและสามารถเรียกใช้ได้หลายครั้ง (ขั้นตอนการจัดเก็บถูกจัดเก็บไว้ในเซิร์ฟเวอร์) เป็นคอลเลกชันที่คอมไพล์ไว้ล่วงหน้าและทำงานได้อย่างรวดเร็ว
2. ขั้นตอนการจัดเก็บระบบที่ใช้กันทั่วไป
รหัส
-- วัตถุประสงค์: ขั้นตอนการจัดเก็บระบบที่ใช้กันทั่วไป
EXEC sp_databases --แสดงรายการฐานข้อมูลในระบบปัจจุบัน
EXEC sp_renamedb 'ทดสอบ', 'test1'--เปลี่ยนชื่อฐานข้อมูล (การเข้าถึงของผู้ใช้คนเดียว)
ใช้สตูดีบี
ไป
EXEC sp_tables --รายการวัตถุที่สอบถามในฐานข้อมูลปัจจุบัน
EXEC sp_columns stuInfo --ส่งคืนข้อมูลเกี่ยวกับคอลัมน์ตาราง
EXEC sp_help stuInfo --ดูข้อมูล stuInfo ของตาราง
EXEC sp_helpconstraint stuInfo --ดูข้อจำกัดของตาราง stuInfo
EXEC sp_helpindex stuMarks --ดูดัชนีของ stuMarks ตาราง
EXEC sp_helptext 'view_stuInfo_stuMarks' --ดูข้อความคำสั่งของมุมมอง
EXEC sp_stored_procedures --ส่งคืนรายการกระบวนงานที่เก็บไว้ในฐานข้อมูลปัจจุบัน
ใช้ต้นแบบ
ไป
exec xp_cmdshell 'mkdir D:bank',no_output--สร้างโฟลเดอร์
3. ขั้นตอนการจัดเก็บแบบกำหนดเอง
(1.) ขั้นตอนการจัดเก็บโดยไม่มีพารามิเตอร์
รหัส
ใช้สตั๊ด
ไป
ถ้ามี (เลือก * จาก sysobjects โดยที่ name='proc_stu')
วาง proc proc_stu
ไป
สร้างขั้นตอน proc_stu
เช่น
ประกาศ @writeAvg float,@labAvg float --ตัวแปรคะแนนเฉลี่ยของการทดสอบข้อเขียนและการทดสอบคอมพิวเตอร์
เลือก @writeAvg=AVG(writeExam), @labAvg=AVG(labExam) จาก stuMarks
พิมพ์ 'คะแนนเฉลี่ยในการทดสอบข้อเขียน:'+convert(varchar(5),@writeAvg)
พิมพ์ 'คะแนนเฉลี่ยของการทดสอบคอมพิวเตอร์:'+convert(varchar(5),@labAvg)
ถ้า (@writeAvg>70 และ @labAvg>70)
พิมพ์ 'ผลสอบวิชานี้: ดีเยี่ยม'
อื่น
พิมพ์ 'ผลสอบของวิชานี้: แย่'
พิมพ์ '------------------------------------------------ --'
พิมพ์ 'นักเรียนที่สอบไม่ผ่าน:'
เลือก stuName, stuInfo.stuNo, การสอบเขียน, การสอบ lab จาก stuInfo
เข้าร่วมภายใน stuMarks บน stuInfo.stuNo=stuMarks.stuNo
WHERE เขียนข้อสอบ<60 หรือห้องปฏิบัติการสอบ<60
ไป
exec proc_stu - ดำเนินการขั้นตอนที่เก็บไว้ (2.) ขั้นตอนที่เก็บไว้พร้อมพารามิเตอร์อินพุต
รหัส
ใช้สตูดีบี
ไป
/*---ตรวจสอบว่ามีอยู่หรือไม่: ขั้นตอนการจัดเก็บถูกจัดเก็บไว้ในตารางระบบ sysobjects---*/
หากมีอยู่ (SELECT * FROM sysobjects WHERE name = 'proc_stu' )
วางขั้นตอน proc_stu
ไป
/*---สร้างขั้นตอนการจัดเก็บ----*/
สร้างขั้นตอน proc_stu
@writePass int,
@labPass int-- คุณสามารถเพิ่มค่าเริ่มต้นเพื่อให้การดำเนินการสามารถเป็นเช่นนี้ exec proc_stu โดยไม่ต้องระบุพารามิเตอร์
เช่น
พิมพ์ 'เครื่องหมายผ่านที่เขียน:'+แปลง(varchar(5),@writePass)
พิมพ์ 'การทดสอบคอมพิวเตอร์ผ่านบรรทัด:'+convert(varchar(5),@labPass)
พิมพ์ '------------------------------------------------ --'
พิมพ์ 'นักเรียนที่สอบไม่ผ่าน:'
เลือก stuName, stuInfo.stuNo, การสอบเขียน, การสอบ lab จาก stuInfo
เข้าร่วมภายใน stuMarks บน stuInfo.stuNo=stuMarks.stuNo
WHERE wroteExam<@writePass หรือ labExam<@labPass
ไป
ดำเนินการ proc_stu 60,55
ดำเนินการ proc_stu 60,@labPass=55
ดำเนินการ proc_stu @writePass=60,@labPass=55
exec proc_stu @writePass=60,55--บรรทัดนี้จะรายงานข้อผิดพลาด: ต้องส่งพารามิเตอร์ 2 และพารามิเตอร์ที่ตามมาจะต้องส่งผ่านในรูปแบบของ '@name = value'
-- เมื่อใช้รูปแบบ '@name = value' แล้ว พารามิเตอร์ที่ตามมาทั้งหมดจะต้องส่งผ่านในรูปแบบ '@name = value'
(3.) ขั้นตอนการจัดเก็บพร้อมพารามิเตอร์เอาต์พุต
รหัส
ใช้สตูดีบี
ไป
/*---ตรวจสอบว่ามีอยู่หรือไม่: ขั้นตอนการจัดเก็บถูกจัดเก็บไว้ในตารางระบบ sysobjects---*/
หากมีอยู่ (SELECT * FROM sysobjects WHERE name = 'proc_stu' )
วางขั้นตอน proc_stu
ไป
/*---สร้างขั้นตอนการจัดเก็บ----*/
สร้างขั้นตอน proc_stu
@notpassSum int OUTPUT, --OUTPUT คีย์เวิร์ด ไม่เช่นนั้นจะถือเป็นพารามิเตอร์อินพุต
@writePass int=60, --พารามิเตอร์เริ่มต้นจะถูกใส่ไว้หลัง
@labPass int=60 --พารามิเตอร์เริ่มต้นจะใส่ไว้หลัง
เช่น
พิมพ์ 'เครื่องหมายผ่านที่เขียน:'+แปลง(varchar(5),@writePass)
+ 'บรรทัดการทดสอบผ่านคอมพิวเตอร์:'+convert(varchar(5),@labPass)
พิมพ์ '------------------------------------------------ --'
พิมพ์ 'นักเรียนที่สอบไม่ผ่าน:'
เลือก stuName, stuInfo.stuNo, การสอบเขียน, การสอบ lab จาก stuInfo
เข้าร่วมภายใน stuMarks บน stuInfo.stuNo=stuMarks.stuNo
WHERE wroteExam<@writePass หรือ labExam<@labPass
/*--นับและส่งคืนจำนวนนักเรียนที่สอบไม่ผ่าน--*/
SELECT @notpassSum=COUNT(stuNo)จาก stuMarks
WHERE wroteExam<@writePass หรือ labExam<@labPass
ไป
/*---เรียกขั้นตอนการจัดเก็บ----*/
ประกาศ @sum int
EXEC proc_stu @sum OUTPUT ,64 --เครื่องหมายผ่านสำหรับการทดสอบคอมพิวเตอร์จะใช้ค่าเริ่มต้น: เครื่องหมายผ่านสำหรับการทดสอบข้อเขียนคือ 64 คะแนน และเครื่องหมายผ่านสำหรับการทดสอบคอมพิวเตอร์คือ 60 คะแนน
พิมพ์ '------------------------------------------------ --'
ถ้า @sum>=3
พิมพ์ 'จำนวนผู้ที่ล้มเหลว:'+convert(varchar(5),@sum)+ 'ผู้คน มากกว่า 60% คะแนนที่ผ่านควรลดลง'
อื่น
print 'จำนวนคนที่ล้มเหลว:'+convert(varchar(5),@sum)+ 'ผู้คนถูกควบคุมต่ำกว่า 60% และคะแนนที่ผ่านอยู่ในระดับปานกลาง'
ไป