我正在浏览我们的代码库并看到很多这样的测试:
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
函数,但这里的目标是获取行的一些属性并同时检查其是否存在。
Yes.
除非如果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
Edit.刚刚注意到您建议的测试是if @@rowcount = 0
not if @@rowcount <> 1
所以上面的内容不会影响它,整个答案可以浓缩为“是”这个词!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)