我想在事務中包裝一些操作,以便我可以確定是否應該在最後一步中刪除表。這是我到目前爲止有:Commit @@ ROWCOUNT
--select the DB
use DB1
--if the table exists, we want to delete it first
IF (EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'dbo'
AND TABLE_NAME = 'VV'))
BEGIN
drop table dbo.VV
END
BEGIN TRAN
SELECT field1
,field2
,field3
INTO dbo.vv
FROM vvr A
WHERE A.field1 <> 'GEN'
AND A.field2 <> 'NO DATA'
AND A.field3 <> '(BLANK) NO'
PRINT 'ROW1:' + CAST(@@ROWCOUNT as varchar(11))
IF @@ROWCOUNT = 0
ROLLBACK TRAN
ELSE
COMMIT TRAN
UPDATE dbo.vv
SET dbo.field1 = vvr.field1
FROM dbo.vv
PRINT 'ROW2:' + CAST(@@ROWCOUNT as varchar(11))
IF @@ROWCOUNT = 0
ROLLBACK TRAN
ELSE
COMMIT TRAN
當我運行這個沒有事務的語句,它運行得很好,所以我知道SQL的作品,但是當我添加事務的語句,它不能告訴我,表VV沒有按不存在。當我選擇VV時,它絕對沒有了。
一旦我得到上面的運行良好,我會在最後添加一個語句來刪除表vvr,但我還沒有那麼遠。
除了user172839的回答:'如果'插入後將提交或回滾事務,但更新後的下一個'如果'將嘗試做同樣的和失敗因爲沒有交易。只有在兩個操作都成功的情況下才需要提交? –
是的,我想要做的是確保前面的語句是成功的,如果是的話,刪除最後一個表(不包括在上面的語句中)。 – Baub