Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建SQL IF语句来检查字段是否需要更新_Sql_Stored Procedures - Fatal编程技术网

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

如何创建SQL IF语句来检查字段是否需要更新,sql,stored-procedures,Sql,Stored Procedures,我创建了一个更新过程,如果另一个表中的匹配记录发生更改,该过程将更改表中记录的值。然而,我如何设置它的是,即使有12个字段可以更新,该过程也将更新其中的每一个字段,即使只更改了1个字段 这是因为效率低下,仅仅一条记录就需要50秒,如果有几百条记录就不好了,我很容易就想到了psudocode if olddata != newdata UPDATE!!! endif 问题是,我对SQL中的if语句几乎没有经验,如果我能使用PHP,那么只需运行一个带有WHERE子句的SELECT语句就

我创建了一个更新过程,如果另一个表中的匹配记录发生更改,该过程将更改表中记录的值。然而,我如何设置它的是,即使有12个字段可以更新,该过程也将更新其中的每一个字段,即使只更改了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语句,它将像这样工作

如果您想知道是否存在满足条件的行,那么可以使用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将用于内部程序