Openquery插入不起作用

时间:2014-06-12 09:03:14

标签: mysql sql sql-server openquery

我有一个链接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/

2 个答案:

答案 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语句不返回   结果集。

http://support.microsoft.com/kb/270119/fi