如果存在相关的表记录,我有一个更新字段的声明。查询将更新每条记录。我不确定最有效/最佳实践方法是什么。到目前为止,我已经提出了2个解决方案
解决方案一:案例陈述
UPDATE item
SET IsRestricted =
CASE
WHEN restriction.Id is null THEN 0
ELSE 1
END
FROM [dbo].[Item] item
left join [dbo].[Restriction] restriction
on restriction.Id = item.Id
解决方案二:多个更新语句
UPDATE item
SET IsRestricted = 1
FROM [dbo].[Restriction] restriction
inner join [dbo].[Item] item
on restriction.Id = item.Id
UPDATE item
SET IsRestricted = 0
FROM [dbo].[Item] item
left join [dbo].[Restriction] restriction
on item.Id = restriction.Id
WHERE restriction.Id is null
如果有人可以帮助我衡量我应该使用它,我们将不胜感激。
注意:我不确定这是否是一个重复的帖子,到目前为止只有类似的我看过涉及触发器或其他各种东西,我不确定是否会改变答案。也可以随意提出其他方法
答案 0 :(得分:1)
正如有些人提到的那样,你可以做一些性能测试,并检查两者的执行计划,以确定哪些可能表现最佳。
如果你只想运行这个语句,我会使用第一种方法,因为你知道你需要更新所有记录,一条语句保持简单。如果这将要多次运行(即添加新数据时),那么我将使用第二个解决方案,在where子句中添加一个,当你再次设置它时,检查它是否已经不是0/1。这应该将处理保持在最低限度。
答案 1 :(得分:0)
经过一些性能测试后,它们似乎都是性能相同的