案例VS多个更新

时间:2011-04-01 09:30:46

标签: tsql sql-server-2008

如果存在相关的表记录,我有一个更新字段的声明。查询将更新每条记录。我不确定最有效/最佳实践方法是什么。到目前为止,我已经提出了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

如果有人可以帮助我衡量我应该使用它,我们将不胜感激。

注意:我不确定这是否是一个重复的帖子,到目前为止只有类似的我看过涉及触发器或其他各种东西,我不确定是否会改变答案。也可以随意提出其他方法

2 个答案:

答案 0 :(得分:1)

正如有些人提到的那样,你可以做一些性能测试,并检查两者的执行计划,以确定哪些可能表现最佳。

如果你只想运行这个语句,我会使用第一种方法,因为你知道你需要更新所有记录,一条语句保持简单。如果这将要多次运行(即添加新数据时),那么我将使用第二个解决方案,在where子句中添加一个,当你再次设置它时,检查它是否已经不是0/1。这应该将处理保持在最低限度。

答案 1 :(得分:0)

经过一些性能测试后,它们似乎都是性能相同的