Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/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
Tsql 如何根据顺序从其他表更新?_Tsql_Sql Server 2005 - Fatal编程技术网

Tsql 如何根据顺序从其他表更新?

Tsql 如何根据顺序从其他表更新?,tsql,sql-server-2005,Tsql,Sql Server 2005,我成功地做到了: 更新后的数据如下,并设法得到最后一条记录以及更新 Service; Sequence; EndSequence A, 2089697; 2089737 B, 2089738; 2089837 C, 2089838; 2090367 D, 2090368; 2090399 E, 2090400; 2090500 现在,我想根据ID上的顺序start和end start更新主表,主表上有一百万条记录。我可以通过游标进行更新,但我更喜欢通过普通查询 顺便说一句,我使用的是SQ

我成功地做到了:

更新后的数据如下,并设法得到最后一条记录以及更新

Service; Sequence; EndSequence  
A, 2089697; 2089737
B, 2089738; 2089837
C, 2089838; 2090367
D, 2090368; 2090399
E, 2090400; 2090500
现在,我想根据ID上的顺序start和end start更新主表,主表上有一百万条记录。我可以通过游标进行更新,但我更喜欢通过普通查询

顺便说一句,我使用的是SQL2005

主表如下所示:

ID; Value; Service
2089697; 23; null
...
2090500; 12; null
因此,结果将是:

ID; Value; Service
2089697; 23; A
... 
2089737; 45; A
2089738; 45; B
...
2089837; 34; B 
2089838; 23; C
...

谢谢这里有多个选项

  • 相关子查询:

    UPDATE MasterTable
    SET Service = (
      SELECT s.Service
      FROM SequenceTable s
      WHERE MasterTable.ID BETWEEN s.Sequence AND s.EndSequence
    )
    WHERE Service IS NULL
    ;
    
  • 内部联接:

    UPDATE MasterTable
    SET Service = s.Service
    FROM SequenceTable s
    WHERE MasterTable.Service IS NULL
      AND MasterTable.ID BETWEEN s.Sequence AND s.EndSequence
    ;
    
    替代语法:

    UPDATE m
    SET Service = s.Service
    FROM MasterTable m
    INNER JOIN SequenceTable s
      ON m.ID BETWEEN s.Sequence AND s.EndSequence
    WHERE m.Service IS NULL
    ;
    
  • 这两个选项都假定
    SequenceTable
    中的范围不重叠