为什么存储过程中的 while 循环会被忽略

Why would a while loop in a stored procedure be ignored

我有一个以以下内容作为我的 while 循环的存储过程:

WHILE(SELECT COUNT(*)
          FROM LinkDB
          WHERE BaseValue = @Guid
          AND 'PENDING WORKFLOW' = (SELECT TOP(1) Status 
                                FROM BaseDB
                                WHERE UniqueIdentifier IN (SELECT LinkValue
                                               FROM LinkDB
                                               WHERE BaseValue = @Guid))) > 0

我有一个执行上述操作的 C# 程序,但如果我查看数据库,它似乎有时会忽略 while 循环。是什么原因造成的?如果我 运行 和 select 分开它 returns 一个高于 0

的值

这是不确定的
您不能保证从 运行 运行

获得相同的顶部 (1)
SELECT TOP(1) Status 
  FROM BaseDB
 WHERE UniqueIdentifier IN (SELECT LinkValue
                              FROM LinkDB
                             WHERE BaseValue = @Guid)

那可能是

 SELECT TOP(1) Status 
   FROM BaseDB
   JOIN LinkDB 
     ON LinkDB.LinkValue = BaseDB.UniqueIdentifier 
    and LinkDB.BaseValue = @Guid 
--where needed deterministic where

-- 你确定不是这个?

 SELECT count(*)
   FROM BaseDB
   JOIN LinkDB 
     ON LinkDB.LinkValue = BaseDB.UniqueIdentifier 
    and LinkDB.BaseValue = @Guid 
    and BaseDB.Status = 'PENDING WORKFLOW'