【发布时间】:2012-05-21 16:17:37
【问题描述】:
我正在尝试从 Micrsoft SQL 服务器运行删除查询以清除远程 mySQL 表中的表。
查询是:
delete from OPENQUERY(WEB_DB,'select id,university_name,college_name from table_name');
这是返回错误:
返回链接服务器“WEB_DB”的 OLE DB 提供程序“MSDASQL” message "关键列信息不足或不正确。太多 行受到更新的影响。”。消息 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 行?!
非常感谢任何帮助。
谢谢 乔纳
【问题讨论】:
-
你的表有主键吗?
-
目前没有,需要创建一个新列,因为 id 可以有重复的值。
-
哇...对于一个既可以为空又可以包含重复项的列的名称非常具有误导性。我很高兴是你而不是我来处理这个烂摊子。
-
我会按照@Mark 的建议从创建主键开始,即使您不打算使用它。否则 sql 引擎可能会混淆识别要删除的行。只是为了澄清,如果 ms sql 怀疑目标链接服务器不支持某些东西,它往往会拉出他身边的所有条目,创建查询并使用“真实”数据将它们推回。所以,我想这就是他被重复检查卡住的地方。
-
您好,已添加主键,但似乎没有任何区别。 id 实际上是一个 studentid,它是学生表中 one->many 连接的多端。已使用新 SQL 更新问题。
标签: mysql sql sql-server-2008 openquery