SQL-Server:从另一个表更新表

SQL-Server:从另一个表更新表

问题描述:

我有两个表,一个表示一些数据,一个将两个数据链接在一起。 第一个,Redaction,有三列; ID,X,Y。 第二个,LinkedRedactions,有两列; PrimaryID,SecondaryID,它们是Redaction中两行的ID s所链接的,并且需要具有相同的XY的值。SQL-Server:从另一个表更新表

我想要做的就是更新RedactionSecondaryID S的XY值,如果他们不已经是相同XY为相应PrimaryID值。

不幸的是,我不能使用TRIGGER,因为这些脚本将在kCura的Relativity平台上运行,它不允许它们运行。一个SQL脚本将是理想的,这将会每隔几秒由一个代理运行。

我已经尝试声明一个临时表,并从该更新,但给我的错误

“必须声明标量变量@T”

DECLARE @T TABLE (
    [ID] INT, [X] INT, [Y] INT 
) 

INSERT INTO @T 
    SELECT 
     [ID], [X], [Y] 
    FROM 
     [Redaction] AS R 
    WHERE 
     [ID] IN (
      SELECT [PrimaryID] FROM [LinkedRedactions] 
     ) 

UPDATE 
    [Redaction] 
SET 
    [X] = @T.[X], [Y] = @T.[Y] 
WHERE 
    [Redaction].[ID] IN (
     SELECT [ID] FROM @T 
    ) 

免责声明:只是我的SQL第二天,所以更多的描述性答案将不胜感激

整个代码可以使用内部连接进行简化。

UPDATE red 
SET [X] = redPrimary.[X], [Y] = redPrimary.[Y] 
FROM [Redaction] red 
INNER JOIN [LinkedRedactions] redLnk ON red.[ID] = redLnk.SecondaryIDs 
INNER JOIN [Redaction] redPrimary ON redLnk.PrimaryID = redPrimary.[ID] 

说明:

[Redaction] red 
[LinkedRedactions] redLnk 
[Redaction] redPrimary 

红,redLnk和redPrimary被称为别名,他们正在使用的使用不同的名称来调用表。

INNER JOIN 

这是一种连接类型,只有在左右表格上都存在相同的列值时才会匹配。

UPDATE red 
--SET statement 
FROM [Redaction] red 

这只通过别名'red'更新[Redaction]表。

INNER JOIN [LinkedRedactions] redLnk ON red.[ID] = redLnk.SecondaryIDs 

这将加入链接表和要由辅助ID和ID分别更新的表。

INNER JOIN [Redaction] redPrimary ON redLnk.PrimaryID = redPrimary.[ID] 

这再次加入链接表和[编辑]表,但分别使用主ID和ID列。这是一个自联接,它允许我们使用同一个表中的一组不同值更新表中的一组值。

由于在ON子句中处理条件,因此不需要条件。

+1

谢谢,完美的作品。你能简单介绍一下它的工作原理吗? – JChristen

+0

很好的解释,谢谢! – JChristen

您可以使用UPDATE FROM

UPDATE [Redaction] 
SET 
    [X] = T.[X], 
    [Y] = T.[Y] 
FROM 
    @T T 
WHERE 
    [Redaction].[ID] = T.[ID]