正文

SQL Transaction

(2007-08-03 22:54:03) 下一个
Transaction is a logical unit of work that should be entirely completed or abort, no intermediate state is allowed. For example, if you sell a product to a customer, your transaction consists of at least two parts: you must update the inventory by subtracting the number of unites sold , and you must update the accounts receivable table in order to bill the customer. You want either updating both tables or neither. Updating only one is not acceptable.

In SQL you use "Begin Transaction" to mark the beginning of a transaction. Normally, if there is error--fail one activity(for example updating), you don't want to execute the others in the same transaction, you use "ROLLBACK TRANSACTION". Check error after each and every activity, if fail then rollback. use "COMMIT TRANSACTION" to commit changes only when all activities succeed.

@@ERROR <>0 only checks the latest sql statement. So better use it after each statement.

if you want to execute more than one statement after "IF" or "ELSE", put them between "BEGIN" and "END".

Use "EXEC procudureName" you can execute other procedures within procedures.

Here is an example:




SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO


CREATE PROCEDURE [dbo].[StoreprocedureName1]
(
    @Col1 varchar(255),
    @Col2 varchar(100),
    @EmailID CHAR(1)='0'
)
AS

SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

BEGIN TRANSACTION

INSERT TableName (ColumnName1,ColumnName2)
VALUES (@Col1,@Col2)

    IF @@ERROR <>0
    BEGIN
        ROLLBACK TRANSACTION
        RAISERROR('Insertion failed.',16,1)
        RETURN -1
    END

    ELSE
    BEGIN
        IF @EmailID = '1'
        BEGIN
            EXEC StoreprocedureName

            IF @@ERROR <>0
            BEGIN
                ROLLBACK TRANSACTION
                RAISERROR('StoreprocedureName execution failed.',16,1)
                RETURN -1
            END
        END
    END
COMMIT TRANSACTION

GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


[ 打印 ]
阅读 ()评论 (0)
评论
目前还没有任何评论
登录后才可评论.