1.Was ist eine gespeicherte Prozedur?
Die gespeicherte Prozedur wird einmal kompiliert und kann mehrmals ausgeführt werden (die gespeicherte Prozedur wird auf dem Server gespeichert und ist eine vorkompilierte Sammlung, die schnell ausgeführt wird).
2. Häufig verwendete gespeicherte Systemprozeduren
Code
-- Zweck: Häufig verwendete gespeicherte Systemprozeduren
EXEC sp_databases – Listen Sie die Datenbanken im aktuellen System auf
EXEC sp_renamedb 'test','test1' – Datenbanknamen ändern (Einzelbenutzerzugriff)
VERWENDEN Sie stuDB
GEHEN
EXEC sp_tables – Liste der in der aktuellen Datenbank abgefragten Objekte
EXEC sp_columns stuInfo – gibt Informationen über eine Tabellenspalte zurück
EXEC sp_help stuInfo – Tabellen-stuInfo-Informationen anzeigen
EXEC sp_helpconstraint stuInfo – Sehen Sie sich die Einschränkungen der Tabelle stuInfo an
EXEC sp_helpindex stuMarks – Zeigt den Index der Tabelle stuMarks an
EXEC sp_helptext 'view_stuInfo_stuMarks' – Zeigen Sie den Anweisungstext der Ansicht an
EXEC sp_stored_procedures – gibt die Liste der gespeicherten Prozeduren in der aktuellen Datenbank zurück
Master verwenden
gehen
exec xp_cmdshell 'mkdir D:bank',no_output – Ordner erstellen
3. Benutzerdefinierte gespeicherte Prozeduren
(1.) Gespeicherte Prozedur ohne Parameter
Code
benutze studb
gehen
falls vorhanden (wählen Sie * aus sysobjects aus, wobei name='proc_stu')
proc proc_stu löschen
gehen
Erstellen Sie die Prozedur proc_stu
ALS
DECLARE @scribedAvg float,@labAvg float – Variable für die durchschnittliche Punktzahl des schriftlichen Tests und des Computertests
SELECT @scribedAvg=AVG(scribedExam), @labAvg=AVG(labExam) FROM stuMarks
print 'Durchschnittspunktzahl im schriftlichen Test:'+convert(varchar(5),@scribedAvg)
print 'Durchschnittliche Punktzahl des Computertests:'+convert(varchar(5),@labAvg)
WENN (@geschriebenAvg>70 UND @labAvg>70)
print 'Prüfungsergebnisse dieser Klasse: Ausgezeichnet'
ANDERS
print 'Prüfungsergebnisse dieser Klasse: schlecht'
drucken '------------------------------------------------ --'
print 'Studenten, die diese Prüfung nicht bestanden haben:'
SELECT stuName,stuInfo.stuNo,scribedExam,labExam FROM stuInfo
INNER JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo
WO geschriebenExam<60 ODER labExam<60
GEHEN
exec proc_stu – Gespeicherte Prozeduren ausführen (2.) Gespeicherte Prozeduren mit Eingabeparametern
Code
VERWENDEN Sie stuDB
GEHEN
/*---Erkennen Sie, ob sie existiert: Die gespeicherte Prozedur wird in der Systemtabelle sysobjects gespeichert---*/
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'proc_stu' )
DROP PROCEDURE proc_stu
GEHEN
/*---Gespeicherte Prozedur erstellen----*/
PROZEDUR ERSTELLEN proc_stu
@geschriebenPass int,
@labPass int-- Sie können einen Standardwert hinzufügen, sodass die Ausführung ohne Angabe von Parametern wie folgt erfolgen kann: exec proc_stu.
ALS
print 'Schriftliche bestandene Note:'+convert(varchar(5),@scribedPass)
print 'Computertest bestanden line:'+convert(varchar(5),@labPass)
drucken '------------------------------------------------ --'
print 'Studenten, die diese Prüfung nicht bestanden haben:'
SELECT stuName,stuInfo.stuNo,scribedExam,labExam FROM stuInfo
INNER JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo
WO geschriebenExam<@scribedPass ODER labExam<@labPass
GEHEN
exec proc_stu 60,55
exec proc_stu 60,@labPass=55
exec proc_stu @scribedPass=60,@labPass=55
exec proc_stu @scribedPass=60,55 – Diese Zeile meldet einen Fehler: Parameter 2 muss übergeben werden, und nachfolgende Parameter müssen in der Form „@name = value“ übergeben werden.
– Sobald die Form „@name = value“ verwendet wird, müssen alle nachfolgenden Parameter in der Form „@name = value“ übergeben werden
(3.) Gespeicherte Prozedur mit Ausgabeparametern
Code
VERWENDEN Sie stuDB
GEHEN
/*---Erkennen Sie, ob sie existiert: Die gespeicherte Prozedur wird in der Systemtabelle sysobjects gespeichert---*/
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'proc_stu' )
DROP PROCEDURE proc_stu
GEHEN
/*---Gespeicherte Prozedur erstellen----*/
PROZEDUR ERSTELLEN proc_stu
@notpassSum int OUTPUT, Schlüsselwort --OUTPUT, andernfalls wird es als Eingabeparameter betrachtet
@scribedPass int=60, --Die Standardparameter werden nachgestellt
@labPass int=60 – Die Standardparameter werden nachgestellt
ALS
print 'Schriftliche bestandene Note:'+convert(varchar(5),@scribedPass)
+ 'Computerbasierter Test bestanden line:'+convert(varchar(5),@labPass)
drucken '------------------------------------------------ --'
print 'Studenten, die diese Prüfung nicht bestanden haben:'
SELECT stuName,stuInfo.stuNo,scribedExam,labExam FROM stuInfo
INNER JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo
WO geschriebenExam<@scribedPass ODER labExam<@labPass
/*--Zählen Sie die Anzahl der Studenten, die die Prüfung nicht bestanden haben, und geben Sie sie zurück.--*/
SELECT @notpassSum=COUNT(stuNo)FROM stuMarks
WO geschriebenExam<@scribedPass ODER labExam<@labPass
GEHEN
/*---Gespeicherte Prozedur aufrufen----*/
DECLARE @sum int
EXEC proc_stu @sum OUTPUT ,64 – Die Bestehensnote für den Computertest übernimmt den Standardwert: Die Bestehensnote für den schriftlichen Test beträgt 64 Punkte und die Bestehensnote für den Computertest beträgt 60 Punkte.
drucken '------------------------------------------------ --'
WENN @sum>=3
print 'Anzahl der Personen, die durchgefallen sind:'+convert(varchar(5),@sum)+ 'Personen, mehr als 60 %, die Punktzahl zum Bestehen sollte gesenkt werden'
ANDERS
print 'Anzahl der Personen, die durchgefallen sind:'+convert(varchar(5),@sum)+ 'Personen, wurde unter 60 % kontrolliert und die Punktzahl zum Bestehen ist mäßig.“
GEHEN