IF OBJECT_ID('UP_GET_XXX_SEQNO') IS NOT NULL

IF OBJECT_ID('UP_GET_XXX_SEQNO') IS NOT NULL
BEGIN
    PRINT 'Dropping procedure UP_GET_XXX_SEQNO'
    DROP PROCEDURE DBO.[UP_GET_XXX_SEQNO]  
    IF @@ERROR = 0
        PRINT 'Procedure UP_GET_XXX_SEQNO dropped'
END
GO

CREATE PROCEDURE DBO.[UP_GET_XXX_SEQNO]
/***********************************************************
* Procedure description:
* Date:   8/8/2014 
* Author: Patrick
* Changes
* Date		Modified By			Comments
* 8/8/2014	 Patrick            Translate PLSQL TO TSQL
************************************************************/
(@ac_table AS INT)
AS
BEGIN
	SET NOCOUNT ON;
	DECLARE @ln_seqno     NUMERIC(10),
	        @ln_id        NUMERIC(10),
	        @ln_tabid     NUMERIC(10)
	/*BEGIN TRY*/
	BEGIN TRY
		/*SET VALUES*/	
		SELECT @ln_seqno = s.nextval,
		       @ln_id        = s.id,
		       @ln_tabid     = s.tabid
		FROM   SystemSequences s WITH (UPDLOCK) INNER   JOIN SqlDictionary d WITH (NOLOCK)
		            ON  d.tableid = s.tabid
		WHERE  s.id = -1
		       AND s.dataareaid = 'dat'
		       AND s.name = 'SEQNO'
		       AND d.fieldid = 0
		       AND d.name = @ac_table		
		IF @@ERROR > 0
		    RAISERROR ('Error raised in SystemSequences s WITH (UPDLOCK) INNER   JOIN SqlDictionary d WITH (NOLOCK)', 16, 1);/*[0-10]:CONTINUE;[11-19]:jump to catch*/
		/*MERGE*/	
		MERGE SystemSequences AS target_tbl
		USING (SELECT @ln_id AS [id],@ln_tabid AS [tabid], 'dat'  AS [dataareaid] ) AS source_tbl
		ON  target_tbl.id        =source_tbl.id         AND 
			target_tbl.tabid     =source_tbl.tabid      AND 
			target_tbl.dataareaid=source_tbl.dataareaid 
		WHEN MATCHED
			THEN  UPDATE SET target_tbl.nextval       = @ln_seqno + 1
        WHEN NOT MATCHED  
			THEN  INSERT (
				[ID],
				[NEXTVAL],
				[MINVAL],
				[MAXVAL],
				[CYCLE],
				[NAME],
				[TABID],
				[DATAAREAID],
				[RECVERSION],
				[RECID] 	
			)VALUES(
				-1,2,1,9.22337203685478E18,0,'SEQNO',
				(SELECT tableid FROM   SqlDictionary WHERE  fieldid = 0 AND NAME = @ac_table),
				'dat',1,-1
			);/*END MERGE*/
		IF @@ERROR > 0
		    RAISERROR ('Error raised in MERGE SystemSequences AS target_tbl', 16, 1);/*[0-10]:CONTINUE;[11-19]:jump to catch*/
		SET @ln_seqno=1
		RETURN @ln_seqno
	END TRY
	/*END TRY*/
	BEGIN CATCH
		/*DECLARE*/
		DECLARE @ErrorMessage        NVARCHAR(4000),
		        @ErrorSeverity       NVARCHAR(5),
		        @ErrorState          NVARCHAR(5),
		        @ERROR_NUMBER        NVARCHAR(5),
		        @ERROR_LINE          NVARCHAR(5),
		        @ERROR_PROCEDURE     NVARCHAR(100) 
		/*SET VALUES*/	
		SELECT @ErrorMessage = ERROR_MESSAGE(),
		       @ErrorSeverity       = ERROR_SEVERITY(),
		       @ErrorState          = ERROR_STATE(),
		       @ERROR_NUMBER        = ERROR_NUMBER(),
		       @ERROR_LINE          = ERROR_LINE(),
		       @ERROR_PROCEDURE     = CASE ISNULL(ERROR_PROCEDURE(), '')
		                               WHEN '' THEN ''
		                               ELSE 
		                                    'Error occur when running procedure: [' 
		                                    + ERROR_PROCEDURE() + '];'
		                          END;
		/*FORMATING MSG*/	
		SET @ErrorMessage = @ERROR_PROCEDURE + CHAR(10)
		    + 'Msg:' + @ErrorMessage + ' Line:' + @ERROR_LINE + ' Number:' + @ERROR_NUMBER
		    + CHAR(10)
		    + 'Date:' + CONVERT(NVARCHAR(30), GETDATE(), 120) 
		/*RAISERROR*/ 
		RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState);
	END CATCH;
	RETURN 0
END
GO

IF @@ERROR = 0
    PRINT 'Procedure UP_GET_XXX_SEQNO created'
GO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值