我正在浏览我们的代码库,看到很多这样的测试:
declare @row_id int = ...
declare @row_attribute string
select
@row_attribute = ROW_ATTRIBUTE
from
SOME_TABLE
where
ROW_ID = @row_id
if @row_attribute is null
begin
... handle not existing condition
end
这是问题,将
if
语句中的条件替换为:if @@rowcount = 0
begin
... handle not existing condition
end
我知道
exist
函数,但这里的目标是获取行的一些属性并同时检查它的存在。 最佳答案
是的。
除非 WHERE
子句不在 PK(或唯一索引)上,否则可能会返回多于一行,但这无论如何都可能是一个错误。在这种情况下,变量会被反复重新分配,其最终值将取决于计划。
DECLARE @row_attribute INT
select
@row_attribute = object_id
from
sys.objects /*<--No WHERE clause. Undefined what the
final value of @row_attribute will be.
depends on plan chosen */
SELECT @row_attribute, @@ROWCOUNT
编辑。 刚刚注意到您提议的测试是
if @@rowcount = 0
而不是 if @@rowcount <> 1
,因此上述内容不会影响它,整个答案可以浓缩为"is"这个词!关于sql - 检查@@rowcount 函数以确定行是否存在可以吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5504167/