SQL Server 中,EXEC ... AT 和 OPENQUERY 都是用于执行链接服务器(Linked Server)上的远程查询的机制,他们之间的区别

一、EXEC ('...') AT linked_server_name

 EXEC ('DELETE FROM your_oracle_temp_table') AT DS; 

  EXEC (...) AT ds 表示在名为 ds的链接服务器(Linked Server)上执行一段 SQL 脚本。

  这个语句会在远程服务器上直接执行你传入的字符串 SQL。

  适用场景:

    执行远程数据库的删除、更新等操作;

    当不需要从远程获取数据集时;

    当你要执行的 SQL 是动态生成的;

二、OPENQUERY(linked_server, 'query')

   SELECT * FROM OPENQUERY(ds, 'SELECT * FROM your_oracle_temp_table'); 

    OPENQUERY 是一种行集函数,它会把远程服务器上的查询结果作为一个表返回给本地 SQL Server。

 可以在本地进行进一步的 JOIN、WHERE 等处理。

    从远程数据库中读取数据;

    需要将远程结果集作为本地表使用;

    常用于跨数据库联合查询(如 Oracle + SQL Server 联合查询)。

三、总结对比

对比项EXEC (...) AT linked_serverOPENQUERY(linked_server, 'query')
是否返回结果集 否(除非远程有 SELECT) 是(必须为 SELECT)
是否执行远程 SQL
用途 DML/DDL 操作 查询数据
能否参与本地查询 否(除非有 OUTPUT 或结果集) 是,可以 JOIN、WHERE 等
参数化支持 否,需拼接字符串 否,需拼接字符串
安全性 存在 SQL 注入风险 存在 SQL 注入风险
推荐用法 删除、更新远程数据 查询远程数据并参与本地处理
 
 
 
posted @ 2025-06-13 09:22  三生有幸格格  阅读(67)  评论(0)    收藏  举报