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,并检查答案中的示例。