如何使用 DB2 中表的列值更新 DB1 中表的列值?

Posted

技术标签:

【中文标题】如何使用 DB2 中表的列值更新 DB1 中表的列值?【英文标题】:How can I update a column value of a table in DB1 with a column value from a table in DB2? 【发布时间】:2021-11-21 21:34:08 【问题描述】:

我正在尝试在来自不同数据库的 2 个表之间执行简单的 SQL 更新。挑战在于,为了更新值,它必须满足某些条件。我已经使用连接语句来满足条件,当我去测试表 B 中的值时,它没有被更新到表 A 中。这是我到目前为止所做的。

USE [dbo]
GO

CREATE PROCEDURE
(
    @User_ID = INT,
    @Batch_ID VARCHAR(32)
)

DECLARE @locid int 

SELECT @locid 
FROM OtherDB.dbo.User AS UL 
WHERE UL.User_ID = @User_Id 
and User_Type = 1;

UPDATE M 
SET 
    M.Number = W.Number
FROM dbo.tableA AS W
JOIN dbo.tableB AS B ON B.ID = W.ID
JOIN dbo.tableC AS C ON C.ToolA = B.ToolA
JOIN dbo.tableD as D ON D.Zone = W.Zone_Name
JOIN OtherDB.dbo.tableMax AS M ON M.LID = @locid
    AND M.Tool = C.Other_Tool
    AND M.Zone = D._Other_Zone
    AND M.Station = W.Station
WHERE W.User_ID = @User_ID
    AND W.Batch_ID = @Batch_ID

SET NOCOUNT OFF; 

【问题讨论】:

mysql SQL Server - 请更正您的标签。 对不起,谢谢 【参考方案1】:

更新语句是更新otherDB中的表M,而不是当前数据库中的表A。

你可以修改存储过程为

Update A
Set A.Number = W.Number
From dbo.tableA A
....

【讨论】:

Josh Potts 谢谢,有没有办法重新排列连接以保持我的条件比较? 内部连接的顺序在逻辑上不会改变任何东西。只需按照建议更改 UPDATE 语句第一行中的别名(尽管请注意,Josh 将 TableA 的别名从“W”更改为相当明显的“A”值。同时删除更新列的别名 - 这是多余的. 我想你想用 M.Number 中的值设置 A 中的 Number - Josh 声明中的一个意外错字。隐秘的别名是一个坏习惯。 @SMor 是对的,你可以更改更新语句。

以上是关于如何使用 DB2 中表的列值更新 DB1 中表的列值?的主要内容,如果未能解决你的问题,请参考以下文章

根据 SQL Server 中表中的列值从两个表中获取一个新表:

如何计算 Spark SQL(Databricks)中表中的列数?

如何使用psql中表中的列列表检索数据

如何根据选定的列而不是Oracle中表的所有列获取不同的行

根据 SQL Server 2008R2 中表中的列获取计数

DB2中表如何增加一列,表中已有很多数据 如表user中有id,name我想增加一个addr那该怎么弄呢?语句怎么写呢