T-SQL中的行计数被IF语句中断

T-SQL中的行计数被IF语句中断,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有以下T-SQL伪代码查询 SET @Loop = 1 WHILE @Loop > 0 BEGIN IF (@Table_name = 'abcdef') BEGIN SET @SqlCmd = 'update top 1000 @Table_name set columnA = ''haha''' END ELSE BEGIN SET @SqlCmd = 'update top 100

我有以下T-SQL伪代码查询

SET @Loop = 1
WHILE @Loop > 0
BEGIN
 IF (@Table_name = 'abcdef')
    BEGIN 
       SET @SqlCmd = 'update top 1000 @Table_name
                      set columnA = ''haha'''
    END
 ELSE
    BEGIN
       SET @SqlCmd = 'update top 1000 @Table_name  
                      set columnA = ''hehe'''
    END

 EXEC dbo.sp_executesql @SqlCmd
 SET @Loop = @@RowCount
END
现在,假设@Table_名称(abcdef和另一个)都有5000条记录,“ELSE”子句中的update语句只运行5次就退出了循环。但是,“IF”子句中的update语句陷入了一个无限循环。我认为原因是@RowCount被IF(@Table_name='abcdef')中断。因为@RowCount在该块内运行时总是返回1

我有一个快速(但非常丑陋)的解决方案,如下所示:

SET @Loop = 1
WHILE @Loop > 0
IF (@Table_name = 'abcdef')
   BEGIN 
     SET @SqlCmd = 'update top 1000 @Table_name
                    set columnA = ''haha'''

     SELECT @Loop = COUNT(1) FROM @Table_name WHERE columnA != 'haha'
   END
ELSE
   BEGIN
     SET @SqlCmd = 'update top 1000 @Table_name  
                    set columnA = ''hehe'''
     SET @Loop = @@RowCount
   END

 EXEC dbo.sp_executesql @SqlCmd
END

尽管上述解决方案可行,但有没有更好的方法来解决这个问题?渴望了解更多,谢谢

您的问题不是
@@ROWCOUNT
。它是:

update top 1000 @Table_name
     set columnA = 'haha';
如果在循环中运行,它将反复设置相同的行。也许你应该使用:

update top 1000 @Table_name
     set columnA = 'haha'
     where columnA <> 'haha';
更新top 1000@Table\u name
set columnA=‘哈哈’
那里有一个‘哈哈’;

您的问题不是
@@ROWCOUNT
。它是:

update top 1000 @Table_name
     set columnA = 'haha';
如果在循环中运行,它将反复设置相同的行。也许你应该使用:

update top 1000 @Table_name
     set columnA = 'haha'
     where columnA <> 'haha';
更新top 1000@Table\u name
set columnA=‘哈哈’
那里有一个‘哈哈’;

Duh,你是对的,没有考虑将(专栏“哈哈”)整合到我的sql中。我的意思是,假设真实的查询实际上比这个例子复杂得多,但是想法应该是一样的。。我想我被我认为是错误的部分弄糊涂了。。谢谢,嗯,你说得对,我没有考虑将(columnA'haha';)整合到我的sql中。我的意思是,假设真实的查询实际上比这个例子复杂得多,但是想法应该是一样的。。我想我被我认为是错误的部分弄糊涂了。。谢谢