使用 OpenQuery 函数对远程表执行DML

SQL SERVER

当通过使用 OpenQuery 函数对远程表执行 UPDATE、 INSERT, 或 DELETETransact-SQL 语句错误消息: " 7357 " 和 " 7320 "

[@more@]

症状

分布式查询, 使用 OpenQuery 函数来更新、 删除, 或以下列方式插入数据
服务器: 消息 7357, 16, 级别状态 2, 行 1 可能不处理对象 = ssn 更新 testlinked 设置 ssn ' '。 OLEDB 提供程序 ' SQLOLEDB ' 指出对象具有任何列。

服务器: 消息 7357, 16, 级别状态 2, 行 1 [ Microsoft SQL Server 驱动程序 ] [ SQLServer ] [ ODBC ] 可能不处理对象 = ssn 更新 testlinked 设置 ssn ' '。 OLEDB 提供程序 ' ' MSDASQL 表明对象已经没有列。
对错误实际文本消息可能有所不同根据 OLEDB 提供程序和操作 (UPDATE、 INSERT 或 DELETE) 执行, 但错误号总是 7357。

如果您使用 Microsoft SQL Server 2005, 您会收到以下错误信息:
服务器: 消息 7357, 16, 级别状态 2, 行 1 无法处理对象 = ssn 更新 testlinked 设置 ssn " "。 OLEDB 提供程序 " SQLOLEDB " 为链接服务器 " ServerName " 表明该对象没有任何列或者当前用户对该对象没有权限。

原因

OpenQuery 要求一个结果集要返回, 但不返回结果集 UPDATE、 DELETE 和 INSERT 语句与 OpenQuery 一起使用。

替代方法

按如下方法您可以解决此问题: 1.使用四部分名称 (linked_server_name.catalog.schema.object_name) 来执行插入、 更新, 或删除操作。 2.SQLServer 联机丛书中所述引用 OpenQuery 函数作为目标表是 INSERT, UPDATE, 或 DELETE 语句, 受到 OLEDB 提供程序的能力。 下列查询说明正确用法与 SQLServerOLEDB 提供程序:
注意 对于将 INSERT 语句, 其中 1 = 0 谓词用于避免从远程服务器, 这会导致性能下降检索数据。 还, UPDATE 和 DELETE 操作具有特殊索引要求 ; 请参阅 " 更多信息 " 部分详细。

更多信息

唯一索引要求
SQLServerOLEDB 提供程序要求基础表用于 UPDATE 或 DELETE 操作上存在唯一索引。 如果没有唯一索引, 远程表上存在试图 UPDATE 或 DELETE 时发生错误:
对 OLEDB 提供程序 ' SQLOLEDB ' 服务器: 消息 7320, Level 16, 状态 2, Line 1 可能不执行查询。 提供程序未能支持必需行查找接口。 提供程序指出与其它属性或要求发生冲突。 [: 多步骤 OLEDB 操作产生错误 / OLE DB 提供程序返回消息。 如果可用检查每个 OLEDB 状态值。 没有工作已完成。
如此要 OpenQuery 和四部分命名 UPDATE 和 DELETE 操作。 通过远程表上添加一个唯一索引解决此问题。
使用 OpenQuery 动态执行
有时可能需要使用动态查询来获得同样效果使用 OpenQuery , 如以下示例所示:

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/73920/viewspace-1002938/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/73920/viewspace-1002938/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值