首页 > 代码库 > Sql Server 存储过程使用技巧
Sql Server 存储过程使用技巧
1、创建带Try。。。Catch的存储过程模板
Copy下面的代码,然后新建查询,就可以写sql语句,执行完后,一个你自己的存储过程就建立好了!
USE [DB]--设定对应的数据库GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- AUTHOR:-- DESCRIBE:-- =============================================CREATE PROCEDURE [dbo].[UP_InsertJHBData] --存储过程名 ( @CustomerName VARCHAR(50) --参数 )AS BEGIN SET NOCOUNT ON --提高性能的,必须要有 DECLARE @Now DATETIME SET @Now = GETDATE() --所有操作保证统一时间 BEGIN TRY --在这里写SQL END TRY BEGIN CATCH DECLARE @ErrorMessage NVARCHAR(4000) ; DECLARE @ErrorSeverity INT ; DECLARE @ErrorState INT ; SELECT @ErrorMessage = ERROR_MESSAGE() , @ErrorSeverity = ERROR_SEVERITY() , @ErrorState = ERROR_STATE() ; PRINT @ErrorMessage RAISERROR(@ErrorMessage, -- Message text. @ErrorSeverity, -- Severity. @ErrorState -- State. ) ; RETURN -1 ; END CATCH END
2、创建带事务的存储过程模板
只是将带Try。。。Catch的存储过程的模板中加入了事务的控制,使用类似
USE [DB]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- AUTHOR:-- DESCRIBE:-- =============================================CREATE PROCEDURE [dbo].[UP_InsertJHBData]--存储过程名--参数 ( @CustomerName VARCHAR(50) )--参数AS BEGIN SET NOCOUNT ON ;--提高性能的,必须要有 DECLARE @Now DATETIME ; SET @Now = GETDATE() ;--所有操作保证统一时间 BEGIN TRY BEGIN TRANSACTION myTrans ;--开始事务 --在这里写SQL COMMIT TRANSACTION myTrans ;--事务提交语句 END TRY BEGIN CATCH ROLLBACK TRANSACTION myTrans-- 始终回滚事务 --抛出异常 DECLARE @ErrorMessage NVARCHAR(4000) ; DECLARE @ErrorSeverity INT ; DECLARE @ErrorState INT ; SELECT @ErrorMessage = ERROR_MESSAGE() , @ErrorSeverity = ERROR_SEVERITY() , @ErrorState = ERROR_STATE() ; RAISERROR(@ErrorMessage, -- Message text. @ErrorSeverity, -- Severity. @ErrorState -- State. ) ; END CATCH END
3、循环模板
在存储过程中,经常会生成一些临时表,然后循环临时表的数据进行处理,以下模板可以帮助伙伴们快速处理此类需求
--生成带行号的临时表数据,并插入临时表#T_Table中 SELECT ROW_NUMBER() OVER (ORDER BY ID) AS RowNum, NAME INTO #T_Table FROM TableName --获取记录总数 DECLARE @RecordCount INT = 0 SELECT @RecordCount = COUNT(1) FROM #T_Table DECLARE @CurrRowNum INT = 1 --当前行号 DECLARE @CurrName VARCHAR(50) --当前字段 --循环记录 WHILE @CurrRowNum <= @RecordCount BEGIN --获取当前记录 SELECT @CurrName = Name FROM #T_Table WHERE RowNum = @CurrRowNum --自定义sql SET @CurrRowNum = @CurrRowNum + 1 --到下一条记录 END
Sql Server 存储过程使用技巧
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。