我正在尝试在事务中包装一些操作,以便确定是否应该在最后一步中删除表。这是我到目前为止所拥有的:
--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,但我还没有做到这一点。