--删除存储过程
DROP PROCEDUREproc_GetStudent;
GO
--创建带参存储过程
CREATEPROCEDUREproc_GetStudentASBEGINSELECT * FROMStudentsENDGO
--执行存储过程
EXECUTEproc_GetStudentGO
修改存储过程
--修改存储过程
ALTER PROCEDUREproc_GetStudentASBEGINSELECT * FROMStudentsENDGO
带参存储过程
--删除存储过程DROPPROCEDURE proc_GetStudent;
GO
--创建带参存储过程CREATEPROCEDURE proc_GetStudent (@StartID INT,@EndID INT)
ASBEGINSELECT * FROM Students WHERE ID BETWEEN @StartID AND @EndID
ENDGO
--执行存储过程
EXECUTE proc_GetStudent 10,20GO
--修改存储过程
ALTERPROCEDURE proc_GetStudent (@StartID INT,@EndID INT)
ASBEGINSELECT * FROM Students WHERE ID NOT BETWEEN @StartID AND @EndID
ENDGO
带通配符参数存储过程
--带通配符参数存储过程
IF OBJECT_ID('proc_GetStudentsBYNameSelect','P') IS NOT NULL
BEGINDROPPROCEDURE proc_GetStudentsBYNameSelect
ENDGOCREATEPROCEDURE proc_GetStudentsBYNameSelect (@Name NVARCHAR(20)='%雷%')
ASBEGINSELECT * FROM Students WHERE Name LIKE @Name
ENDGOEXECUTE proc_GetStudentsBYNameSelect
EXECUTE proc_GetStudentsBYNameSelect '%毕%'
带输出参数存储过程
--带输出参数的存储过程
IF OBJECT_ID('proc_GetStudentRecord','P') IS NOT NULL
BEGINDROPPROCEDURE proc_GetStudentRecord
ENDGOCREATEPROCEDURE proc_GetStudentRecord (@ID INT,@name NVARCHAR(20) OUT,@gender NVARCHAR(20) OUT)
ASBEGINSELECT @name=Name,@gender=Gender FROM Students WHERE ID=@ID
PRINT @name+' '+@gender
ENDGOEXECUTE proc_GetStudentRecord 21,'',''
不缓存存储过程
--WITH RECOMPILE 不缓存的存储过程
IF(OBJECT_ID('proc_Temp','P')) IS NOT NULL
BEGINDROPPROCEDURE proc_Temp
ENDGOCREATEPROCEDURE proc_Temp
WITH RECOMPILE --不缓存
ASBEGINSELECT * FROM Students
ENDGOEXECUTE proc_Temp
GO
加密存储过程
IF (OBJECT_ID('proc_TempEncryption','P')) IS NOT NULL
BEGINDROPPROCEDURE proc_TempEncryption
ENDGOCREATEPROCEDURE proc_TempEncryption
WITH ENCRYPTION
ASBEGINSELECT * FROM Students
ENDGOEXECUTE proc_TempEncryption
EXECUTE sp_helptext proc_TempEncryption
--结果:对象 'proc_TempEncryption' 的文本已加密。
EXECUTE sp_helptext proc_Temp
带游标参数存储过程
--带游标参数存储过程
IF (OBJECT_ID('proc_Cursor','P')) IS NOT NULL
BEGINDROPPROCEDURE proc_Cursor
ENDGOCREATEPROCEDURE proc_Cursor (@cursorCURSORVARYINGOUTPUT)
ASBEGINSET @cursor=cursor FORWARD_ONLY STATIC FORSELECT ID,Name,Gender FROM Students
OPEN @cursorENDGO
--调用
DECLARE @exec_cursor CURSORDECLARE @ID INT,@Name NVARCHAR(20),@Gender NVARCHAR(20)
EXECUTE proc_Cursor @cursor=@exec_cursor OUTPUTFETCHNEXTFROM @exec_cursor INTO @ID,@Name,@Gender
WHILE(@@FETCH_STATUS=0)
BEGIN
PRINT 'ID:'+CONVERT(NVARCHAR(20),@ID)+',Name:'+@Name+',Gender:'+@Gender
FETCHNEXTFROM @exec_cursor INTO @ID,@Name,@Gender
ENDCLOSE @exec_cursor
DEALLOCATE @exec_cursor