gpt4 book ai didi

sql - 在@@ ROWCOUNT上提交交易

转载 作者:行者123 更新时间:2023-12-04 13:32:45 26 4
gpt4 key购买 nike

我正在尝试在事务中包装一些操作,以便可以确定是否应该在最后一步中删除表。这是我到目前为止的内容:

    --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,但我还没有完成。

最佳答案

如果要基于单个语句影响的行数执行多个操作,则需要立即将该值捕获到自己的变量中:

DECLARE @rc int
SELECT field1
,field2
,field3

INTO dbo.vv
FROM vvr A
WHERE A.field1 <> 'GEN'
AND A.field2 <> 'NO DATA'
AND A.field3 <> '(BLANK) NO'

SET @rc = @@ROWCOUNT
PRINT 'ROW1:' + CAST(@rc as varchar(11))
IF @rc = 0
ROLLBACK TRAN
ELSE
COMMIT TRAN

即使是像 PRINT这样的简单语句,也会给 @@ROWCOUNT 分配一个新值(在这种情况下为0)

关于sql - 在@@ ROWCOUNT上提交交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18392051/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com