Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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 Server中按DateModified列查找更改的行_Sql_Sql Server - Fatal编程技术网

在SQL Server中按DateModified列查找更改的行

在SQL Server中按DateModified列查找更改的行,sql,sql-server,Sql,Sql Server,我有多个表,比如说表2、表3、表4,每个表都有一个DateModified列。更新表1以修改表2、表3、表4中与表1中修改的当前日期不同的最新日期的最佳方法是什么 这是我当前的查询,它工作得很好,但在大型表(比如2.000.000行)上速度很慢 update t1 set IsChanged = 1, DateModified = isnull(( select max(v) from (va

我有多个表,比如说表2、表3、表4,每个表都有一个DateModified列。更新表1以修改表2、表3、表4中与表1中修改的当前日期不同的最新日期的最佳方法是什么

这是我当前的查询,它工作得很好,但在大型表(比如2.000.000行)上速度很慢

update
    t1
set
    IsChanged = 1,
    DateModified = isnull((
        select
            max(v)
        from
            (values (t2.DateModified), (t3.DateModified), (t4.DateModified)) as value (v)
    ), '1900-01-01')
from
    Table1 t1
    inner join Table2 t2 on t2.id_Table1 = t1.id_Table1
    inner join Table3 t3 on t3.id_Table2 = t2.id_table2
    inner join Table4 t4 on t4.id_Table3 = t2.id_table3
where
    isnull(t1.DateModified, '1900-01-01') <> isnull((
        select
            max(v)
        from
            (values (t2.DateModified), (t3.DateModified), (t4.DateModified)) as value (v)
    ), '1900-01-01')

使用CASE WHEN来获得最高的DateModified可能比max快。创建一个触发器,在必要时更新Table1可能是有意义的,这样就完全不需要这个复杂的查询了。顺便问一下,这里的所有关系都是一对一的吗?否则我可以想象你会得到意想不到的结果。是的,最终它们是一对一的