/*==========================================================*描述:存儲過程知識點(diǎn)總結(jié),以Northwind數(shù)據(jù)庫的Employees表為例
===========================================================*/
--=========================1.out輸出/輸出的存儲過程==================
create PRocedure usp_OutParameterSelect @employeeID int, @name nvarchar(10) out,--**即作為輸入,又作為輸出** @lastName nvarchar(20) out --**out與output在這里通用**asbegin select @name=FirstName--**重新賦值,作為輸出** ,@lastName=LastName from dbo.Employees where EmployeeID = @employeeID and City = @name--**輸入?yún)?shù)查詢**end
GO
--===========================執(zhí)行測試=======================
declare @employeeID int,@name nvarchar(10),@lastName nvarchar(20)set @employeeID = 6set @name = 'London'
execute usp_OutParameterSelect @employeeID,@name output,@lastName output
select @name as FirstName,@lastName as LastName
GO
--=========================2.異常處理的存儲過程=================
create procedure usp_ExceptionHandling
as
begin begin try select 1/0--**除數(shù)為零** end try
begin catch if @@ERROR <> 0 declare @errorMessage nvarchar(4000) ,@errorSeverity int ,@errorState int select @errorMessage = ERROR_MESSAGE()--**錯誤的信息** ,@errorSeverity = ERROR_SEVERITY()--***錯誤的嚴(yán)重級別* ,@errorState = ERROR_STATE()--**錯誤的狀態(tài)** /*拋出一個異常*/ raiserror (@errorMessage,@errorSeverity,@errorState) end catchend
GO
--===========================執(zhí)行測試==========================
execute usp_ExceptionHandling
--執(zhí)行結(jié)果如下:/*Msg 50000, Level 16, State 1, Procedure usp_ExceptionHandling, Line 17Divide by zero error encountered.*/GO--=========================3.事物處理的存儲過程===================
createprocedure usp_Transaction
asbegin begin try SET XACT_ABORT ON /* *當(dāng)SET XACT_ABORT為ON 時,如果Transact-SQL語句產(chǎn)生運(yùn)行時錯誤,事務(wù)終止并回滾. *為OFF 時,只回滾產(chǎn)生錯誤的語句.而事務(wù)繼續(xù)處理. */ begin transaction --**這條跟新語句執(zhí)行時會出現(xiàn)異常,F(xiàn)irstName被定義為Not Null** update dbo.Employees set FirstName = NULL where EmployeeID = 1 update dbo.Employees set FirstName = FirstName + 'XXX' where City = 'London' commit transaction end try begin catch if @@TRANCOUNT > 0 rollback transaction--**事物回滾** declare @errorMessage nvarchar(4000) ,@errorSeverity int ,@errorState int select @errorMessage = ERROR_MESSAGE()--**錯誤的信息** ,@errorSeverity = ERROR_SEVERITY()--***錯誤的嚴(yán)重級別* ,@errorState = ERROR_STATE()--**錯誤的狀態(tài)** /*拋出一個異常*/ raiserror (@errorMessage,@errorSeverity,@errorState)end catch
end
--===========================執(zhí)行測試==============================
execute usp_Transaction
/*==============================================================*********************************End******************************************==============================================================*/
新聞熱點(diǎn)
疑難解答
圖片精選