Sql 未提交删除批处理
我有这样一个批量删除:Sql 未提交删除批处理,sql,sql-server,tsql,azure-sql-database,Sql,Sql Server,Tsql,Azure Sql Database,我有这样一个批量删除: SET NOCOUNT ON; DECLARE @rows INT, @count INT, @message VARCHAR(100); SET @rows = 1; SET @count = 0; WHILE @rows > 0 BEGIN BEGIN TRANSACTION; delete top(100000) from Table whete T1='HU' SET @rows = @@ROWCOUNT; SET @count = @c
SET NOCOUNT ON;
DECLARE @rows INT, @count INT, @message VARCHAR(100);
SET @rows = 1;
SET @count = 0;
WHILE @rows > 0
BEGIN
BEGIN TRANSACTION;
delete top(100000) from Table whete T1='HU'
SET @rows = @@ROWCOUNT;
SET @count = @count + @rows
RAISERROR('COUNT %d', 0, 1, @count) WITH NOWAIT
COMMIT TRANSACTION;
END
但此查询未提交,在我尝试关闭窗口(会话)后,系统会询问我是否要提交事务
我的查询错了吗?请试试这个
SET NOCOUNT ON;
DECLARE @rows INT, @count INT, @message VARCHAR(100);
SET @rows = 1;
SET @count = 0;
BEGIN TRY
BEGIN TRANSACTION;
WHILE @rows > 0
BEGIN
delete top(100000) from Table whete T1='HU'
SET @rows = @@ROWCOUNT;
SET @count = @count + @rows
RAISERROR('COUNT %d', 0, 1, @count) WITH NOWAIT
END
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRAN
END CATCH
-------------比如说
Declare @tbl Table(
CustomerID INT ,
CustomerName VARCHAR(100),
AccreditationNumber VARCHAR(100)
)
INSERT INTO @tbl VALUES(1272,'Bree','Gold')
INSERT INTO @tbl VALUES(1272,'Bree','Gold')
INSERT INTO @tbl VALUES(1272,'Bree','Gold')
INSERT INTO @tbl VALUES(1272,'Anneke','silver')
INSERT INTO @tbl VALUES(1272,'Anneke','silver')
SET NOCOUNT ON;
DECLARE @rows INT, @count INT, @message VARCHAR(100);
SET @rows = 1;
SET @count = 0;
BEGIN TRY
BEGIN TRANSACTION;
WHILE @rows > 0
BEGIN
delete top(1) from @tbl where CustomerID=1272
SET @rows = @@ROWCOUNT;
SET @count = @count + @rows
RAISERROR('COUNT %d', 0, 1, @count) WITH NOWAIT
END
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRAN
END CATCH
它可能没有提交,因为您在提交之前刚刚引发了一个错误……如果我删除了raiserror,查询仍然不会提交transaction@ZoharPeled-
RAISERROR
的严重性小于11,基本上类似于printf
。顺便说一句,为什么你认为你需要一个显式事务?如果你在循环中开始并提交它,你根本不需要它。只需删除显式事务和raiserror。这里只有噪音。只需将@rows设置为@rowcount,无需保留累计计数。我已对其进行了测试,但仍然存在相同的问题请注释这些行set count=count+rows RAISERROR('count%d',0,1,@count)用NOWAIT替换whete,并检查答案中的示例。