Sql begin end无论我是否有一条语句,它使维护时更容易避免错误,使意图更清晰。无论我是否有一条语句,我都会编写begin end,它使维护时更容易避免错误,使意图更清晰。 CREATE PROCEDURE [dbo].[proc_BaseTable_Ta
Sql begin end无论我是否有一条语句,它使维护时更容易避免错误,使意图更清晰。无论我是否有一条语句,我都会编写begin end,它使维护时更容易避免错误,使意图更清晰。 CREATE PROCEDURE [dbo].[proc_BaseTable_Ta,sql,tsql,sql-server-2005,stored-procedures,transactions,Sql,Tsql,Sql Server 2005,Stored Procedures,Transactions,begin end无论我是否有一条语句,它使维护时更容易避免错误,使意图更清晰。无论我是否有一条语句,我都会编写begin end,它使维护时更容易避免错误,使意图更清晰。 CREATE PROCEDURE [dbo].[proc_BaseTable_TargetTable_Update] ( @BaseTableId bigint, @BaseTableTypeId bigint, @Alias nvarchar(max), @TargetTableNo
begin end无论我是否有一条语句,它使维护时更容易避免错误,使意图更清晰。无论我是否有一条语句,我都会编写begin end,它使维护时更容易避免错误,使意图更清晰。
CREATE PROCEDURE [dbo].[proc_BaseTable_TargetTable_Update]
(
@BaseTableId bigint,
@BaseTableTypeId bigint,
@Alias nvarchar(max),
@TargetTableNonPkItemId bigint,
@OtherField nvarchar(max) = NULL
)
AS
-- NOTE: There is a problem with enabling tractions on this, the trans always fails
-- with the current structure, seemingly because of the SELECT 1 FROM TARGETTABLE
BEGIN
BEGIN TRAN
UPDATE BaseTable
SET
Alias = @Alias,
BaseTableTypeId = @BaseTableTypeId,
UpdatedOn = GETUTCDATE()
WHERE BaseTableId = @BaseTableId
IF @@ERROR <> 0
BEGIN
RAISERROR('Error updating BaseTable', 16, 1)
ROLLBACK TRAN
RETURN
END
IF EXISTS(SELECT 1 FROM TargetTable WHERE BaseTableId = @BaseTableId)
UPDATE TargetTable
SET
TargetTableNonPkItemId = @TargetTableNonPkItemId,
OtherField = @OtherField
WHERE BaseTableId = @BaseTableId
IF @@ERROR <> 0
BEGIN
RAISERROR('Error updating TargetTable', 16, 1)
ROLLBACK TRAN
RETURN
END
ELSE
INSERT INTO TargetTable(BaseTableId, TargetTableNonPkItemId, OtherField)
VALUES (@BaseTableId, @TargetTableNonPkItemId, @OtherField)
IF @@ERROR <> 0
BEGIN
RAISERROR('Error inserting TargetTable', 16, 1)
ROLLBACK TRAN
RETURN
END
COMMIT TRAN
END
IF EXISTS
{
UPDATE
RAISE ERROR IF BAD
}
ELSE
{
INSERT
RAISE ERROR IF BAD
}
IF EXISTS
UPDATE
IF ERROR
RAISE ERROR
ELSE
INSERT
IF ERROR
RAISE ERROR
CREATE PROCEDURE [dbo].[proc_BaseTable_TargetTable_Update]
(
@BaseTableId bigint,
@BaseTableTypeId bigint,
@Alias nvarchar(max),
@TargetTableNonPkItemId bigint,
@OtherField nvarchar(max) = NULL
)
AS
-- NOTE: There is a problem with enabling tractions on this, the trans always fails
-- with the current structure, seemingly because of the SELECT 1 FROM TARGETTABLE
BEGIN
BEGIN TRAN
UPDATE BaseTable
SET
Alias = @Alias,
BaseTableTypeId = @BaseTableTypeId,
UpdatedOn = GETUTCDATE()
WHERE BaseTableId = @BaseTableId
IF @@ERROR <> 0
BEGIN
RAISERROR('Error updating BaseTable', 16, 1)
ROLLBACK TRAN
RETURN
END
IF EXISTS(SELECT 1 FROM TargetTable WHERE BaseTableId = @BaseTableId)
BEGIN
UPDATE TargetTable
SET
TargetTableNonPkItemId = @TargetTableNonPkItemId,
OtherField = @OtherField
WHERE BaseTableId = @BaseTableId
IF @@ERROR <> 0
BEGIN
RAISERROR('Error updating TargetTable', 16, 1)
ROLLBACK TRAN
RETURN
END
END
ELSE
BEGIN
INSERT INTO TargetTable(BaseTableId, TargetTableNonPkItemId, OtherField)
VALUES (@BaseTableId, @TargetTableNonPkItemId, @OtherField)
IF @@ERROR <> 0
BEGIN
RAISERROR('Error inserting TargetTable', 16, 1)
ROLLBACK TRAN
RETURN
END
END
COMMIT TRAN
END
CREATE PROCEDURE [dbo].[proc_BaseTable_TargetTable_Update]
( @BaseTableId bigint
, @BaseTableTypeId bigint
, @Alias nvarchar(max)
, @TargetTableNonPkItemId bigint
, @OtherField nvarchar(max) = NULL )
AS
BEGIN TRY
BEGIN TRAN
UPDATE BaseTable
SET Alias = @Alias
, BaseTableTypeId = @BaseTableTypeId
, UpdatedOn = GETUTCDATE()
WHERE BaseTableId = @BaseTableId
IF EXISTS(SELECT 1 FROM TargetTable WHERE BaseTableId = @BaseTableId)
UPDATE TargetTable
SET TargetTableNonPkItemId = @TargetTableNonPkItemId
, OtherField = @OtherField
WHERE BaseTableId = @BaseTableId
ELSE
INSERT INTO TargetTable(BaseTableId, TargetTableNonPkItemId, OtherField)
VALUES (@BaseTableId, @TargetTableNonPkItemId, @OtherField)
IF @@TRANCOUNT > 0
BEGIN
COMMIT TRAN
END
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;
IF @@TRANCOUNT > 0
BEGIN
ROLLBACK TRAN
END
END CATCH