T-SQL中的行计数被IF语句中断
我有以下T-SQL伪代码查询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
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中。我的意思是,假设真实的查询实际上比这个例子复杂得多,但是想法应该是一样的。。我想我被我认为是错误的部分弄糊涂了。。谢谢