【问题标题】:How to update a table in a linked server query from a local result set?如何从本地结果集中更新链接服务器查询中的表?
【发布时间】:2017-10-08 10:50:53
【问题描述】:

我正在本地 sql server 实例上运行存储过程。

SQL 服务器实例链接到我们 i 系列上的 DB2 实例。

我有一个使用连接到本地表的 OPENQUERY 语句生成的结果集。它只是一个 ID 列表。

我现在如何使用 OPENQUERY 运行更新,并带有

    WHERE id IN (idListFromPreviousQuery)

类型声明。

理想情况下,我正在寻找基于集合的解决方案,而不是基于光标/循环的解决方案,我真的不知道如何去做。

【问题讨论】:

    标签: sql-server tsql db2 linked-server db2-400


    【解决方案1】:

    您可以使用WITH 或 temp_table:

    SELECT id
    INTO #temptable
    FROM ...;
    
    UPDATE linked_server.db_name.schema_name.table_name
    SET col_name = ...
    WHERE id IN (SELECT id FROM #temptable);
    

    或:

    WITH cte(id) AS (
     SELECT id
     FROM ...
    )
    UPDATE linked_server.db_name.schema_name.table_name
    SET col_name = ...
    WHERE id IN (SELECT id FROM cte);
    

    编辑:

    WITH cte(id) AS (
         SELECT id
         FROM ...
        )
    UPDATE oq 
    SET    col_name = ...
    FROM   OPENQUERY([LINKEDSERVER],    'select ... from ...') oq 
    WHERE oq.id IN (SELECT id FROM cte);
    

    【讨论】:

    • 啊,错过了我的问题中的一个重要部分 - 我似乎只能使用 OPENQUERY - 我无法直接引用建议格式的链接服务器表。
    猜你喜欢
    • 2023-03-12
    • 2015-07-05
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    相关资源
    最近更新 更多