我有两个表,一个表示一些数据,另一个表示将两个数据链接在一起。
第一个Redaction
有三列; ID
,X
,Y
。
第二个LinkedRedactions
有两列; PrimaryID
,SecondaryID
,它们是ID
中两个链接的Redaction
行,需要具有相同的X
和{{Y
1}}值。
我想要做的是更新X
中Y
和Redaction
的{{1}}的值,如果它们与SecondaryID
的值不同{1}}和X
代表相应的Y
。
不幸的是我不能使用PrimaryID
,因为脚本将在kCura的Relativity平台上运行,而这个平台并不允许它们。 SQL脚本是理想的,它将由代理每隔几秒运行一次。
我已尝试声明临时表并从中进行更新,但这给了我错误
"必须声明标量变量@ T"
TRIGGER
免责声明:这只是我第二天的SQL,所以会有更多的描述性答案
答案 0 :(得分:2)
使用内部联接可以简化整个代码。
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
red,redLnk和redPrimary被称为别名,它们用于通过使用不同的名称来调用表。
INNER JOIN
这是一种连接类型,仅当左侧和右侧表中存在相同的列值时才匹配。
UPDATE red
--SET statement
FROM [Redaction] red
这只通过它的别名'red'更新[Redaction]表。
INNER JOIN [LinkedRedactions] redLnk ON red.[ID] = redLnk.SecondaryIDs
这将分别连接Link表和要由辅助ID和ID更新的表。
INNER JOIN [Redaction] redPrimary ON redLnk.PrimaryID = redPrimary.[ID]
这会再次连接Link表和[Redaction]表,但分别使用Primary ID和ID列。这是一个自连接,它允许我们使用同一个表中的一组不同值更新表中的一组值。
由于条件是在ON子句中处理的,因此不需要WHERE条件。
答案 1 :(得分:0)
您可以使用UPDATE FROM
UPDATE [Redaction]
SET
[X] = T.[X],
[Y] = T.[Y]
FROM
@T T
WHERE
[Redaction].[ID] = T.[ID]