如何创建SQL IF语句以检查字段是否需要更新

时间:2012-08-23 01:12:40

标签: sql stored-procedures

我已经创建了一个更新程序,如果另一个表中的匹配记录发生了变化,它将更改表中记录的值,但是,我如何设置它是因为即使有12个字段也是如此可以更新,即使只有1个字段被更改,该过程也会更新它们中的每一个

这是因为效率低,只需要1个记录大约需要50秒,如果有几百个则不好,我想起了这个容易的psudocode

if olddata != newdata

    UPDATE!!!

endif

事情是我对SQL中的if语句几乎没有经验,如果我可以使用PHP那么只需运行带有WHERE子句的SELECT就像上面的if语句那样检查行数就很容易了它返回(如果0则没有变化)但是程序必须只是SQL,我能想出的最好的就是这个

IF(SELECT o.field FROM originaltbale AS o INNER JOIN updatetable AS u ON o.primarykey = u.primarykey WHERE o.field <> u.field) != 0

     UPDATE!!!

ENDIF

但我怀疑这是否会起作用因为我确定SELECT不会返回行数,我怎样才能创建一个if语句,它将像这样工作

2 个答案:

答案 0 :(得分:3)

我不确定我是否完全理解您要更新的内容,但是您最好在单个语句中执行此操作并将IF合并到WHERE子句中。

UPDATE updatetable u
   SET ... something ...
 WHERE EXISTS ( SELECT 1 FROM originaltable o WHERE o.primarykey = u.primarykey AND ... )

但是如果你在两个表中存储相同的字段,你确定这是你的表的最佳数据库设计吗?

答案 1 :(得分:2)

如果您想知道某行是否满足您的条件,则可以使用EXISTS子句。

-- If the original table doesn't have a record with the state same as that in updatetable
IF NOT EXISTS (SELECT o.field FROM originaltbale AS o INNER JOIN updatetable AS u ON o.primarykey = u.primarykey WHERE o.field <> u.field)
BEGIN

    UPDATE !!!

END

希望这有帮助。