我有一个链接MySQL -server到MSSQL服务器,我试图将数据INSERT到MySQL -server上的表admin_user,但最终得到错误:
无法处理对象“dbo.admin_user”。 OLE DB提供程序 链接服务器“MYDB”的“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 |我| * qweqweqwdq2edqdadasd | 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 | |空|> | % | 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,我有使用
配置的提供程序字符串DRIVER =(MySQL ODBC 5.3 ANSI驱动程序); SERVER = XX.XXX.XXX.XXX; PORT = 3306; DATABASE = bitnami_magento; USER =我; PASSWORD =为mypass; OPTION = 3;
此外,我还从“提供程序选项”(MSDASQL)中取消选中“仅限零级别”框,并确保允许ad_hoc查询。我做错了什么?
我遵循了指示 http://dbperf.wordpress.com/2010/07/22/link-mysql-to-ms-sql-server2008/
答案 0 :(得分:1)
您的查询中有错误:
在OPENQUERY()中,您必须使用MySQL表名而不是MSSQL表(如果要插入MySQL表中)。
以下语法应该有效
INSERT INTO OPENQUERY([MYDB], 'SELECT * FROM mysqlDbName.mysqlTableName') VALUES
('Testi','Testaaja','me@google.com','koe','','','','','','1','N;','','')
请相应地将mysqlDbName.mysqlTableName
更改为MySQL数据库和表名。
答案 1 :(得分:1)
问题是我是个白痴。 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需要返回一个结果集,但UPDATE,DELETE, 和OpenQuery一起使用的INSERT语句不返回 结果集。