为什么存储过程中的 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'
我有一个以以下内容作为我的 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
的值这是不确定的
您不能保证从 运行 运行
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'