常用SQL整理 - TRY CATCH & TRAN


DECLARE @EMP_ID INT ,
    @EMP_NAME VARCHAR(50)

DECLARE @EMP TABLE
    (
      EMP_ID INT ,
      EMP_NAME NVARCHAR(50)
    )
	-- 模擬數據庫中存在名爲Yanan的數據
INSERT  INTO @EMP
        ( EMP_ID, EMP_NAME )
VALUES  ( 0, -- EMP_ID - int
          N'Yanan'  -- EMP_NAME - nvarchar(50)
          )

SELECT * INTO #tmp FROM @EMP

IF EXISTS ( SELECT  1
            FROM    #tmp
            WHERE   EMP_NAME = 'Yanan' )
    BEGIN
        PRINT 0
        RETURN
    END

--事務要寫在RETURN之後
BEGIN TRY
    BEGIN TRANSACTION

    INSERT  INTO #tmp
            ( EMP_ID, EMP_NAME )
    VALUES  ( 1, 'AAA' ) 


    UPDATE  #tmp
    SET     EMP_NAME = 'Yanan'
    WHERE   EMP_ID = 'AA'

END TRY
BEGIN CATCH
    IF XACT_STATE() <> 0
        BEGIN
            PRINT 1
            ROLLBACK
        END

END CATCH

IF XACT_STATE() <> 0
    BEGIN
        PRINT 2
        COMMIT TRAN
    END

SELECT  *
FROM    #tmp

DROP TABLE #tmp

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章