1.¿Qué es un procedimiento almacenado?
El procedimiento almacenado se compila una vez y se puede ejecutar varias veces (el procedimiento almacenado se almacena en el servidor. Es una colección precompilada y se ejecuta rápidamente).
2. Procedimientos almacenados del sistema de uso común
código
-- Propósito: Procedimientos almacenados del sistema de uso común
EXEC sp_databases: enumera las bases de datos en el sistema actual
EXEC sp_renamedb 'test','test1'--Cambiar nombre de base de datos (acceso de usuario único)
USAR estuDB
IR
EXEC sp_tables: lista de objetos consultados en la base de datos actual
EXEC sp_columns stuInfo: devuelve información sobre una columna de la tabla
EXEC sp_help stuInfo: ver información de stuInfo de la tabla
EXEC sp_helpconstraint stuInfo: ver las restricciones de la tabla stuInfo
EXEC sp_helpindex stuMarks: ver el índice de la tabla stuMarks
EXEC sp_helptext 'view_stuInfo_stuMarks': ver el texto de la declaración de la vista
EXEC sp_stored_procedures: devuelve la lista de procedimientos almacenados en la base de datos actual
usar maestro
ir
exec xp_cmdshell 'mkdir D:bank',no_output--Crear carpeta
3. Procedimientos almacenados personalizados
(1.) Procedimiento almacenado sin parámetros
código
usar studb
ir
si existe (seleccione * de sysobjects donde nombre = 'proc_stu')
soltar proc proc_stu
ir
crear procedimiento proc_stu
COMO
DECLARAR @writeAvg float,@labAvg float --Variable de puntuación promedio de la prueba escrita y la prueba por computadora
SELECCIONE @writeAvg=AVG(examen escrito), @labAvg=AVG(labExam) DE stuMarks
print 'Puntuación promedio en prueba escrita:'+convert(varchar(5),@writeAvg)
print 'Puntuación promedio de la prueba de computadora:'+convert(varchar(5),@labAvg)
SI (@writeAvg>70 Y @labAvg>70)
imprimir 'Resultados del examen de esta clase: Excelente'
DEMÁS
imprimir 'Resultados del examen de esta clase: malos'
imprimir '------------------------------------------------ --'
print 'Estudiantes que no aprobaron este examen:'
SELECCIONE stuName,stuInfo.stuNo,examen escrito,examen de laboratorio DESDE stuInfo
UNIÓN INTERNA stuMarks ON stuInfo.stuNo=stuMarks.stuNo
DONDE examen escrito<60 O examen de laboratorio<60
IR
exec proc_stu: ejecutar procedimientos almacenados (2.) Procedimientos almacenados con parámetros de entrada
código
USAR estuDB
IR
/*---Detectar si existe: el procedimiento almacenado se almacena en la tabla del sistema sysobjects---*/
SI EXISTE (SELECCIONAR * DESDE sysobjects DONDE nombre = 'proc_stu')
PROCEDIMIENTO DE SALIDA proc_stu
IR
/*---Crear procedimiento almacenado----*/
CREAR PROCEDIMIENTO proc_stu
@writePass int,
@labPass int: puede agregar un valor predeterminado para que la ejecución sea como este exec proc_stu sin especificar parámetros.
COMO
print 'Marca de aprobación escrita:'+convert(varchar(5),@PassEscrito)
print 'Línea de aprobación de prueba de computadora:'+convert(varchar(5),@labPass)
imprimir '------------------------------------------------ --'
print 'Estudiantes que no aprobaron este examen:'
SELECCIONE stuName,stuInfo.stuNo,examen escrito,examen de laboratorio DESDE stuInfo
UNIÓN INTERNA stuMarks ON stuInfo.stuNo=stuMarks.stuNo
DONDE examen escrito<@escritoPass O examen de laboratorio<@labPass
IR
ejecutivo proc_stu 60,55
ejecutivo proc_stu 60,@labPass=55
ejecutivo proc_stu @writePass=60,@labPass=55
exec proc_stu @writePass=60,55: esta línea informará un error: se debe pasar el parámetro 2 y los parámetros posteriores se deben pasar en forma de '@nombre = valor'.
-- Una vez que se utiliza el formulario '@nombre = valor', todos los parámetros posteriores deben pasarse en el formulario '@nombre = valor'
(3.) Procedimiento almacenado con parámetros de salida
código
USAR estuDB
IR
/*---Detectar si existe: el procedimiento almacenado se almacena en la tabla del sistema sysobjects---*/
SI EXISTE (SELECCIONAR * DESDE sysobjects DONDE nombre = 'proc_stu')
PROCEDIMIENTO DE SALIDA proc_stu
IR
/*---Crear procedimiento almacenado----*/
CREAR PROCEDIMIENTO proc_stu
@notpassSum int OUTPUT, palabra clave --OUTPUT; de lo contrario, se considera un parámetro de entrada
@writePass int=60, --Los parámetros predeterminados se colocan después
@labPass int=60: los parámetros predeterminados se colocan después
COMO
print 'Marca de aprobación escrita:'+convert(varchar(5),@PassEscrito)
+ 'Línea de aprobación de prueba basada en computadora:'+convert(varchar(5),@labPass)
imprimir '------------------------------------------------ --'
print 'Estudiantes que no aprobaron este examen:'
SELECCIONE stuName,stuInfo.stuNo,examen escrito,examen de laboratorio DESDE stuInfo
UNIÓN INTERNA stuMarks ON stuInfo.stuNo=stuMarks.stuNo
DONDE examen escrito<@escritoPass O examen de laboratorio<@labPass
/*--Cuenta y devuelve el número de estudiantes que reprobaron el examen--*/
SELECCIONE @notpassSum=CONTAR(stuNo)DE stuMarks
DONDE examen escrito<@escritoPass O examen de laboratorio<@labPass
IR
/*---Llamar al procedimiento almacenado----*/
DECLARAR @sum int
EXEC proc_stu @sum SALIDA, 64: la calificación para aprobar la prueba de computadora adopta el valor predeterminado: la calificación para aprobar la prueba escrita es 64 puntos y la calificación para aprobar la prueba de computadora es 60 puntos.
imprimir '------------------------------------------------ --'
SI @suma>=3
print 'Número de personas que reprobaron:'+convert(varchar(5),@sum)+ 'Personas, más del 60%, la puntuación para aprobar debería reducirse'
DEMÁS
print 'Número de personas que reprobaron:'+convert(varchar(5),@sum)+ 'Personas, han sido controladas por debajo del 60% y la puntuación para aprobar es moderada'
IR