1
我有兩個SQL命令,這兩個命令對我來說都很好。SQL Server:try catch或@@ error獲得更高效
這是第一個:
DECLARE @SeqID int,
@RtnCode int
BEGIN TRY
BEGIN TRANSACTION
INSERT INTO TableA (Name,Value)
VALUES (@Name,@Value)
SET @SeqID = SCOPE_IDENTITY()
Insert Into TableB(TableASeqID, Name, Vlaue)
Values (@SeqID, @Name, @Value)
COMMIT TRANSACTION
SET @RtnCode = '1'
GOTO FINALMSG
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0 BEGIN
ROLLBACK TRANSACTION
SET @RtnCode = '10001'
GOTO FINALMSG
END
END CATCH
FINALMSG:
BEGIN
SELECT
@RtnCode
END
這是第二個:
DECLARE @SeqID int,
@RtnCode int
BEGIN TRANSACTION
INSERT INTO TableA (Name, Value)
VALUES (@Name, @Value)
IF(@@ERROR <> 0 OR @@ROWCOUNT <> 1)
BEGIN
ROLLBACK TRAN
SET @RtnCode = '1001'
GOTO FINALMSG
END
SET @SeqID = SCOPE_IDENTITY()
Insert Into TableB(TableASeqID, Name, Vlaue)
Values (@SeqID, @Name, @Value)
IF(@@ERROR <> 0 OR @@ROWCOUNT <> 1)
BEGIN
ROLLBACK TRAN
SET @RtnCode = '1001'
GOTO FINALMSG
END
COMMIT TRANSACTION
SET @RtnCode = '1'
GOTO FINALMSG
FINALMSG:
BEGIN
SELECT
@RtnCode
END
第一個命令通常是在我的工作中使用,但DBA喜歡第二個。
我對此感到困惑。
哪種方法更有效率?
Is Try Catch比每個命令使用更多的消耗效率使用@@ERROR()
?
TRY/CATCH對於程序員來說是更現代和更簡單的方式 - 對@@ ERROR進行檢查是老式的,經過充分測試的版本,許多DBA都喜歡(因爲它們往往是保守的,經常不喜歡新的做事方式)。就個人而言:我總是比較喜歡'TRY/CATCH',因爲它使代碼變得更加簡潔 - 您可以省去在代碼中每隔一秒或三行檢查一次'@@ ERROR'。 – 2014-09-19 05:02:19
同意@marc_s ,對於代碼可讀性,TRY/CATCH更爲可取。對性能的影響將非常小,如果存在差異,那麼與查詢花費的時間相比,這將是微不足道的。 – 2014-09-19 07:43:51