我正在尝试从Micrsoft SQL服务器运行删除查询以清除远程mySQL表中的表。
查询为:
delete from OPENQUERY(WEB_DB,'select id,university_name,college_name from table_name');
这将返回错误:
返回链接服务器"WEB_DB"的 OLE DB 提供程序"MSDASQL" 消息"键列信息不足或不正确。太多 行受更新影响。Msg 7345,级别 16,状态 1,第 1 行 链接服务器"WEB_DB"的 OLE DB 提供程序"MSDASQL"无法 从表中删除"选择 ID,university_name,college_name 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,第一次运行删除命令将其减少到~700,所以似乎限制是大约200行?!
任何帮助非常感谢。
谢谢乔娜
如果您尝试删除远程表中的所有行,为什么不这样做:
DELETE WEB_DB...table_name;
或者,如果这是您经常做的事情,为什么不在另一端放置一个存储过程来调用呢?
您也可以尝试:
EXEC ('delete table_name') AT WEB_DB;
要使用 openquery 清除 mysql 中的表,您应该尝试以下操作:
EXEC('TRUNCATE TABLE table_name') AT WEB_DB
下面的语法为我解决了这个问题:
EXEC ('delete table_name where a in (1,2,3)') AT linked_server