T-SQL存储过程中try和catch以及错误处理的用法例子

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[ImportPlatformParam] 
	-- Add the parameters for the stored procedure here
	@mOrderID_Source nvarchar(64),
	@mProjVersion_Source nvarchar(2),
	@mOrderID_Target nvarchar(64),
	@mProjVersion_Target nvarchar(2)
AS
DECLARE @SQLStr nvarchar(4000), @count int
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- Insert statements for procedure here
	SET XACT_ABORT ON;

	BEGIN TRY
		BEGIN TRAN
			--删除目标平台的平台参数
			DELETE FROM	UDSGKS_ProjPlatformParamMap
			WHERE		OrderID = @mOrderID_Target AND
						ProjVersion = @mProjVersion_Target

			--删除目标平台的平台非标点
			DELETE FROM	UDSGKS_ProjNSList
			WHERE		OrderID = @mOrderID_Target AND
						ProjVersion = @mProjVersion_Target

			--导入源平台的平台参数到目标平台
			INSERT INTO	UDSGKS_ProjPlatformParamMap
						(	OrderID, ProjVersion, 
							PlatformParamName, PlatformParamValue,
							PlatformParamDesc, PlatformParamType, FileName)
			SELECT	@mOrderID_Target AS OrderID,
					@mProjVersion_Target AS ProjVersion,
					PlatformParamName, PlatformParamValue,
					PlatformParamDesc, PlatformParamType, FileName
			FROM	UDSGKS_ProjPlatformParamMap
			WHERE	OrderID = @mOrderID_Source AND
					ProjVersion = @mProjVersion_Source
	
			--导入源平台的非标难度时间到目标平台
			DELETE FROM	UDSGKS_ProjDifficulty 
			WHERE		OrderID = @mOrderID_Target AND
						ProjVersion = @mProjVersion_Target

			INSERT INTO	UDSGKS_ProjDifficulty
			SELECT		@mOrderID_Target AS OrderID, @mProjVersion_Target AS ProjVersion,
						PDPeriod, PRPeriod, MDPeriod, MRPeriod, LDPeriod, LRPeriod
			FROM		UDSGKS_ProjDifficulty
			WHERE		OrderID = @mOrderID_Source AND
						ProjVersion = @mProjVersion_Source

			--导入源平台的平台非标点到目标平台
			INSERT INTO	UDSGKS_ProjNSList
						(	OrderID, ProjVersion, 
							NSID, NSFuncOption, NSRange, SchemaDesc,
							ModelID, Manner, MaterialDesc, PartID, PartName,
							PartSchema, MaterialID, DrawID, Remark, Flag, Hours)
			SELECT	@mOrderID_Target AS OrderID,
					@mProjVersion_Target AS ProjVersion,
					NSID, NSFuncOption, NSRange, SchemaDesc, ModelID,
					Manner, MaterialDesc, PartID, PartName, PartSchema,
					MaterialID, DrawID, Remark, Flag, Hours
			FROM	UDSGKS_ProjNSList
			WHERE	OrderID = @mOrderID_Source AND
					ProjVersion = @mProjVersion_Source

			--导入源平台的附言和备注到目标平台
			UPDATE	UDSGKS_PlatformTask
			SET		Postscripts = T1.Postscripts,
					Remark = T1.Remark
					FROM	(	SELECT Postscripts,Remark
								FROM	UDSGKS_PlatformTask
								WHERE	OrderID = @mOrderID_Source AND
										ProjVersion = @mProjVersion_Source) AS T1	
			WHERE	OrderID = @mOrderID_Target AND
					ProjVersion = @mProjVersion_Target
			
		COMMIT TRAN	
	END TRY
	BEGIN CATCH
		ROLLBACK TRAN
		DECLARE @ErrMsg NVARCHAR(4000), @ErrSeverity INT
        SELECT @ErrMsg = ERROR_MESSAGE(),
               @ErrSeverity = ERROR_SEVERITY()
		RAISERROR (@ErrMsg, @ErrSeverity, 1)
	END CATCH
END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值