如何创建SQL IF语句来检查字段是否需要更新
我创建了一个更新过程,如果另一个表中的匹配记录发生更改,该过程将更改表中记录的值。然而,我如何设置它的是,即使有12个字段可以更新,该过程也将更新其中的每一个字段,即使只更改了1个字段 这是因为效率低下,仅仅一条记录就需要50秒,如果有几百条记录就不好了,我很容易就想到了psudocode如何创建SQL IF语句来检查字段是否需要更新,sql,stored-procedures,Sql,Stored Procedures,我创建了一个更新过程,如果另一个表中的匹配记录发生更改,该过程将更改表中记录的值。然而,我如何设置它的是,即使有12个字段可以更新,该过程也将更新其中的每一个字段,即使只更改了1个字段 这是因为效率低下,仅仅一条记录就需要50秒,如果有几百条记录就不好了,我很容易就想到了psudocode if olddata != newdata UPDATE!!! endif 问题是,我对SQL中的if语句几乎没有经验,如果我能使用PHP,那么只需运行一个带有WHERE子句的SELECT语句就
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语句,它将像这样工作如果您想知道是否存在满足条件的行,那么可以使用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
希望这有帮助。如果您想知道是否存在满足条件的行,那么可以使用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
希望这能有所帮助。我不确定自己是否完全理解您正在更新的内容,但您最好在一条语句中这样做,并将IF合并到WHERE子句中
UPDATE updatetable u
SET ... something ...
WHERE EXISTS ( SELECT 1 FROM originaltable o WHERE o.primarykey = u.primarykey AND ... )
但是,如果在两个表中存储同一字段,您确定这是表的最佳数据库设计吗?我不确定我是否完全理解您正在更新的内容,但最好在一条语句中执行此操作,并将if合并到WHERE子句中
UPDATE updatetable u
SET ... something ...
WHERE EXISTS ( SELECT 1 FROM originaltable o WHERE o.primarykey = u.primarykey AND ... )
但是,如果在两个表中存储同一字段,您确定这是适合您的表的最佳数据库设计吗?什么数据库系统,哪个版本??SQL只是结构化查询语言-一种被许多数据库系统使用的语言,但不是一种数据库产品。。。功能通常是特定于供应商的-因此我们确实需要知道您使用的是什么数据库系统…我的工作是将MySQL数据库与Microsoft SQL Server同步,正如您所说,不同的数据库产品具有不同的功能,我声明SQL而不是MySQL或Transact-SQL,这样我就可以得到与任何特定产品无关的答案,而只是一般的SQL,这也意味着我完成的脚本如果按照我设计的方式运行,将更加强大,因为它是独立于平台的。您可以随时添加两个标记-一个用于MySQL,另一个用于SQL Server…什么数据库系统,哪个版本??SQL只是结构化查询语言-一种被许多数据库系统使用的语言,但不是一种数据库产品。。。功能通常是特定于供应商的-因此我们确实需要知道您使用的是什么数据库系统…我的工作是将MySQL数据库与Microsoft SQL Server同步,正如您所说,不同的数据库产品具有不同的功能,我声明SQL而不是MySQL或Transact-SQL,这样我就可以得到与任何特定产品无关的答案,而只是一般的SQL,这也意味着我完成的脚本如果按照我设计的方式运行,将更加强大,因为它是独立于平台的。您可以随时添加两个标记-一个用于MySQL,另一个用于SQL Server…我正在同步两个不同的数据库,一个MySQL数据库和一个Microsoft SQL Server,更新表是stating表,它包含来自其他数据库的数据,显然MySQL数据库将用于web系统,而Microsoft SQL Server将用于内部程序我正在同步两个不同的数据库,一个MySQL数据库和一个Microsoft SQL Server,更新表是stating表,它包含来自另一个数据库的数据,显然MySQL数据库将用于web系统,而Microsoft SQL Server将用于内部程序