SQL server openquery - “键列信息不足或不正确。更新会影响太多行。”

时间:2012-05-21 16:17:37

标签: mysql sql sql-server-2008 openquery

我正在尝试从Micrsoft SQL服务器运行删除查询以清除远程mySQL表中的表。

查询是:

delete from OPENQUERY(WEB_DB,'select id,university_name,college_name from table_name');

这将返回错误:

  

返回链接服务器“WEB_DB”的OLE DB提供程序“MSDASQL”   消息“键列信息不足或不正确。太多了   行受到更新的影响。“。消息7345,级别16,状态1,行1   链接服务器“WEB_DB”的OLE DB提供程序“MSDASQL”不能   从表中删除“select id,university_name,college_name from   table_name“。更新不符合架构   要求。

用于创建表的SQL如下:

CREATE TABLE IF NOT EXISTS `table_name` (
  `pk` int(11) AUTO_INCREMENT,
  `studentid` int(11) default NULL,
  `university_name` varchar(255) default NULL,
  `college_name` varchar(255) default NULL,
  CONSTRAINT PRIMARY KEY(`pk`)
);

有趣的是它似乎确实删除了远程数据库记录的某些部分,应该有~900,第一次运行delete命令将此减少到~700所以看起来限制大约是200行?!

任何帮助都非常感激。

由于 Jona的

3 个答案:

答案 0 :(得分:1)

如果您尝试删除远程表中的所有行,为什么不:

DELETE WEB_DB...table_name;

或者如果你经常这样做,为什么不把另一端的存储过程调用呢?

您也可以尝试:

EXEC ('delete table_name') AT WEB_DB;

答案 1 :(得分:0)

要使用openquery清除mysql中的表,你应该试试这个:

EXEC('TRUNCATE TABLE table_name') AT WEB_DB

答案 2 :(得分:0)

下面的语法为我解决了这个问题:

EXEC ('delete table_name where a in (1,2,3)') AT linked_server