SQL 包含 TOP 1 的命令具有无限加载时间
SQL command containing TOP 1 has infinite load time
我有一个 SQL 命令可以正常工作。但是,今天该命令似乎已停止工作。它只是加载而没有结束。
DECLARE @varVKA VARCHAR(20)
SELECT TOP 1 @varVKA = t.AufNr
FROM TABLE AS t
WHERE RStatus = '10'
Order By AufNr asc
UPDATE TABLE
SET RStatus = '30' WHERE AufNr = @varVKA
我做了一些故障排除,我唯一注意到的是,当我将 TOP 更改为任何其他数量时,结果几乎是即时的。
有什么改变可以使 TOP 1 不起作用?该命令已经正常运行一年多了。
经过一些试验,我想我找到了解决办法。
我仍然不确定为什么错误发生至少一年没有失败,但也许它与“TOP 1 AufNr”和“ORDER BY AufNr asc”有关。
一旦我用“min”替换了“ORDER BY”,这似乎工作类似,命令再次工作。
我也研究了@GordonLinoff 的建议并希望改进命令。
现在命令如下所示:
UPDATE TableName
SET Rstatus = '30'
WHERE AufNr =(
SELECT min(AufNr)
FROM TableName
WHERE RStatus = '10')
如果你只想更新一行,那么你可以这样做:
UPDATE t
SET RStatus = '30'
FROM (SELECT TOP 1 t.*
FROM TABLE t
WHERE RStatus = '10'
ORDER BY AufNr ASC
) t;
我有一个 SQL 命令可以正常工作。但是,今天该命令似乎已停止工作。它只是加载而没有结束。
DECLARE @varVKA VARCHAR(20)
SELECT TOP 1 @varVKA = t.AufNr
FROM TABLE AS t
WHERE RStatus = '10'
Order By AufNr asc
UPDATE TABLE
SET RStatus = '30' WHERE AufNr = @varVKA
我做了一些故障排除,我唯一注意到的是,当我将 TOP 更改为任何其他数量时,结果几乎是即时的。
有什么改变可以使 TOP 1 不起作用?该命令已经正常运行一年多了。
经过一些试验,我想我找到了解决办法。 我仍然不确定为什么错误发生至少一年没有失败,但也许它与“TOP 1 AufNr”和“ORDER BY AufNr asc”有关。
一旦我用“min”替换了“ORDER BY”,这似乎工作类似,命令再次工作。
我也研究了@GordonLinoff 的建议并希望改进命令。
现在命令如下所示:
UPDATE TableName
SET Rstatus = '30'
WHERE AufNr =(
SELECT min(AufNr)
FROM TableName
WHERE RStatus = '10')
如果你只想更新一行,那么你可以这样做:
UPDATE t
SET RStatus = '30'
FROM (SELECT TOP 1 t.*
FROM TABLE t
WHERE RStatus = '10'
ORDER BY AufNr ASC
) t;