我有一个语句来更新一个字段,如果相关的表记录存在。查询更新每个记录。我不确定最有效/最好的做法是什么。到目前为止,我拿出2个解决方案案例VS多个更新
解决方法一: Case语句
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
如果有人可以帮助我判断哪些我应该使用它,将不胜感激。
注意:我不确定这是否是一个重复的帖子,到目前为止只有我见过的类似的包含触发器或各种其他的东西,我不知道如果这改变了答案。也可随意建议替代方法
你需要的IsRestricted列?在特定时间不会询问是否存在限制,以确保您始终得到正确答案? – 2011-04-01 09:34:47
把它们都放在同一个查询窗口中,打开“包含实际执行计划”(ctrl + m),运行批处理,观察结果:) – Blorgbeard 2011-04-01 09:35:13
@Damien这个标志在那里,因为数据库的使用情况会相当的性能密集而且我们不希望在特定时间进行查询。尽管我并没有真正寻找特定于我的问题的答案,也没有像这两种方法的一般比较那样多的问题 – Manatherin 2011-04-01 09:49:47