2014-06-12 3 views
1

내가 MSSQL 서버에 링크 된 MySQL의 -server이 작동하지 삽입하고 난 MySQL의 -server에 테이블이를 admin_user에 데이터를 삽입하려고하지만 오류 치울 :OPENQUERY는

Cannot process the object "dbo.admin_user". The OLE DB provider "MSDASQL" for linked server "MYDB" indicates that either the object has no columns or the current user does not have permissions on that object.

이를 잘 작동 : 여기

INSERT into openquery([MYDB], 'dbo.admin_user') values ('Testi','Testaaja','[email protected]','koe','','','','','','1','N;','','') 

내가 CRE에 사용되는 사용자의 권리입니다 :이 오류를 얻을 수

SELECT * FROM openquery([MYDB], 'SELECT * FROM admin_user') 

는 ODBC 접속 내 카탈로그 bitnami_magento입니다

| xx.xxx.xxx.xx | me | *qweqweqwdq2edqdadasd| Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | Y | Y | Y | Y
| Y | Y | Y | Y
| Y | Y | Y | Y
| Y | Y | Y | Y | Y | | | |
| 0 | 0 | 0 | 0 | | NULL |

>  | %    | 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     | 

을 ating, 나는 공급자 문자열이

DRIVER=(MySQL ODBC 5.3 ANSI Driver); SERVER= XX.XXX.XXX.XXX;PORT=3306;DATABASE=bitnami_magento; USER=me;PASSWORD=mypass;OPTION=3;

이 또한 내가 "레벨 제로 전용"공급자 옵션에서 상자 (MSDASQL) 선택 취소 한 구성과 만든 ad_hoc 쿼리가 허용되는지 확인하십시오. 내가 뭘 잘못하고 있니?

당신은 쿼리에 오류가 나는 http://dbperf.wordpress.com/2010/07/22/link-mysql-to-ms-sql-server2008/

+0

나는 MySQL의 -server에서 루트 @ 로컬 호스트로 삽입 시도하고 괜찮 았는데. 사용자가 나에게 모든 권한을 가지고있어서 오픈 쿼리로 삽입 할 수없는 이유를 모르겠습니다. – user1054844

+0

'dbo'없이 삽입을 시도한 적이 있습니까? – CSL

+0

예. 오류 메시지에는 아무런 차이가 없습니다. – user1054844

답변

1

을 따라 지침이 있습니다 (당신은 MSSQL 한 대신 MySQL의 테이블 이름을 사용해야합니다)를 OPENQUERY에서

을 (당신이 경우 MySQL 테이블에 삽입하고 싶을 때).

다음 구문은

INSERT INTO OPENQUERY([MYDB], 'SELECT * FROM mysqlDbName.mysqlTableName') VALUES 
('Testi','Testaaja','[email protected]','koe','','','','','','1','N;','','') 

그에 따라 당신에게 MySQL 데이터베이스 및 테이블 이름을 mysqlDbName.mysqlTableName을 변경해주십시오 작동합니다.

+0

실제로 연결된 데이터베이스 속성에 "연결된 서버 :"로 정의 된 연결된 데이터베이스의 이름이므로 MYDB (대괄호 포함 또는 불필요) 만 필요합니다. 공급자 문자열은 "올바른"데이터베이스를 사용하도록주의합니다. – user1054844

+0

그게 전부입니다. 사실, 이것은 전체 구문입니다. 또한'OPENQUERY'에'SELECT * FROM' 부분을 추가했습니다. – Pred

+1

당신의 질의는 여전히 dummy where 절이 필요합니다. 그렇지 않으면 결과 집합을 얻을 것이므로 느려질 것입니다. 결과를 얻지 못하도록 설정해야합니다 (예 : 1 = 0). – user1054844

0

문제는 내가 바보였습니다. Openquery 구문은 결과 집합이 반환 될 것으로 예상합니다.

그래서 실제 쿼리의 일부로 포함되도록 "더미 쿼리"가 필요하므로 응답으로 결과 집합을 가져옵니다. "1 = 0"을 쓰면 실제 결과를 얻지 못해 쿼리가 빨라집니다.

근무 예 :

insert openquery(MYDB, 'select firstname from admin_user where 1=0') values ('3','Testi','Testaaja','[email protected]','koe12','koe22','','','','0','0','1','','','') 

OpenQuery requires a result set to be returned, but UPDATE, DELETE, and INSERT statements that are used with OpenQuery do not return a result set.

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