我正在尝试从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的
答案 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