我有一个链接的MySQL -server到MSSQL -server,我试图将数据插入到MySQL -server上的表admin_user中,但最终得到了错误:
无法处理对象"dbo.admin_user“。用于链接服务器"MYDB“的OLE提供程序"MSDASQL”表示对象没有列,或者当前用户对该对象没有权限。
这样做很好:
SELECT * FROM openquery([MYDB], 'SELECT * FROM admin_user')这将得到错误:
INSERT into openquery([MYDB], 'dbo.admin_user') values ('Testi','Testaaja','me@google.com','koe','','','','','','1','N;','','')下面是我用来创建ODBC连接的用户的权限
( xx.xxx.xxx.xx )\x{e76f}=. Y,Y Y,Y ()\x{e76f}\x{e76f}| % | me | \*asdasadasdsadasdasdsad| Y | Y | Y | Y | Y | > Y | Y | Y | Y | Y | Y > | Y | Y | Y | Y | Y > | Y | Y | Y | Y > | Y | Y | Y | Y > | Y | Y | Y | Y | > Y | | | | > | 0 | 0 | 0 | 0 > | | NULL | 我的目录是bitnami_magento,我将提供程序字符串配置为 XX.XXX.XXX.XXX;PORT=3306;DATABASE=bitnami_magento;DRIVER=(MySQL ODBCD5.3 ANSI驱动程序); 此外,我还取消了提供者选项(MSDASQL)中的“级别零”框,并确保允许ad_hoc查询。我做错什么了? 下面是我遵循http://dbperf.wordpress.com/2010/07/22/link-mysql-to-ms-sql-server2008/的说明
发布于 2014-06-12 09:45:29
查询中有一个错误:
在OPENQUERY()中,您必须使用MySQL表名而不是MSSQL表名称(如果您想插入到MySQL表中)。
下面的语法应该可以工作
INSERT INTO OPENQUERY([MYDB], 'SELECT * FROM mysqlDbName.mysqlTableName') VALUES
('Testi','Testaaja','me@google.com','koe','','','','','','1','N;','','')请相应地将mysqlDbName.mysqlTableName更改为MySQL数据库和表名。
发布于 2014-06-12 09:55:44
问题是我是个白痴。Openquery的语法要求返回一个结果集。
因此,它显然需要一个“虚拟查询”作为实际查询的一部分,以便得到响应的结果集。编写"where 1=0“使查询速度更快,因为它不会得到任何响应的实际结果。
工作实例:
insert openquery(MYDB, 'select firstname from admin_user where 1=0') values ('3','Testi','Testaaja','me@google.com','koe12','koe22','','','','0','0','1','','','')OpenQuery要求返回结果集,但与OpenQuery一起使用的UPDATE、DELETE和INSERT语句不返回结果集。
http://support.microsoft.com/kb/270119/fi
https://stackoverflow.com/questions/24180390
复制相似问题