2009-10-16 5 views
1

SQL Server 2008 SSIS를 사용하여 Access 데이터베이스에서 MySQL 데이터베이스에 행을 삽입하려고합니다.SSIS 및 MySQL - 테이블 이름 구분 기호 문제

TITLE: Microsoft SQL Server Management Studio 
------------------------------ 

ERROR [42000] [MySQL][ODBC 5.1 Driver][mysqld-5.0.51a-community-nt]You have 
an error in your SQL syntax; check the manual that corresponds to your MySQL 
server version for the right syntax to use near '"orders"' at line 1 

문제는 구분 기호와 관련이 있습니다. 5.1 ODBC 드라이버를 사용하고 있으며 MySql에 연결하여 ADO.Net 대상 데이터 소스에서 테이블을 선택할 수 있습니다.

"shipto addresses" 

ADO.NET 대상 편집기에서 "테이블 또는 뷰를 사용하여"텍스트 상자에서 따옴표를 제거하거나 교체 : MySQL의 테이블은 모두 SSIS 패키지 편집기에서 큰 따옴표로 구분 표시 테이블 이름에 공백이 있으면 다른 것과 함께 작동하지 않습니다. SSIS에서 삽입 쿼리를 함께 사용하면 큰 따옴표가 유지되고 작은 따옴표가 추가됩니다.

위의 오류는 편집기에서 "미리보기"를 클릭했을 때 표시되며 패키지를 실행하면 실제 오류가 발생합니다 (실제 삽입 문이긴하지만).

이 동작을 제어 할 수있는 것 같지 않습니다. 어떤 제안? SQL을 직접 코딩 할 수있는 다른 패키지 유형에는이 문제가 없습니다.

답변

2

죄송합니다 InnerJoin, 나는 받아 들여진 답변을 너에게서 멀리 가져 가야했다. 나는 a workaround here을 발견

이 솔루션은 모든 작업에 대한 연결을 다시 사용하고, 어떤 삽입을하기 전에 다음과 같은 실행 SQL 실행 작업과 연결을 위해 ANSI가 인용 설정하는 것입니다

:

set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER, 
    NO_ENGINE_SUBSTITUTION,ANSI_QUOTES' 
0

테이블 이름을 대괄호로 묶어보십시오. 그게 도움이 될거야.

편집 : 가능한 경우 Access 테이블을 기반으로보기 (공백없이)를 만들고 내보내는 데 사용합니다. 연결된 테이블이있는 다른 Access 데이터베이스를 작성하는 것이지만 이것이 최선의 방법이라고 생각합니다.

+0

큰 따옴표 이외의 다른 구분 기호는 SSIS에서 허용하지 않습니다. 테이블 이름에 공백이 없으면 구분 문자는 작동하지 않습니다. 나는 모든 종류의 것을 시도했다. – cdonner

+0

다른 추천 단어를 추가했습니다. 작동하는지 알려주세요. –

0

저는 항상 MYSQL에서 SSIS를 사용하는 데 어려움을 겪었습니다. ODBC 드라이버를 설치 한 후에도 데이터 흐름이 원활하지 않습니다. 나는 항상 SQL Server와 MYSQL간에 연결된 ODBC 연결을 만드는 것을 끝내었다. 그런 다음 연결된 서버 쿼리를 사용하여 데이터를 가져옵니다. SSIS 데이터 흐름 작업을 사용하는 대신 일반적으로 OPENQUERY를 실행하는 저장 프로 시저의 형태로 SQL 실행 명령을 사용합니다.

당신이 할 수있는 한 가지 해결책은 SQL Server 데이터베이스에 데이터를로드하고이를 MYSQL 데이터베이스에로드하기 전에 스테이징 환경으로 사용하는 것입니다. 정기적으로 SQL Server 2008과 MYSQL간에 데이터를 이동하며 과거에는 Access와 SQL Server간에 정기적으로 데이터를 이동하는 데 사용했습니다.

또 다른 가능한 솔루션은 들어오는 Access 데이터를 MYSQL 데이터베이스로로드하기 전에 변환하는 것입니다. 그러면 MYSQL에 전달되는 열 이름과 실제 데이터를 정리할 수 있습니다.

이 중 하나가 적합하면 알려주세요.

+0

문제가되는 테이블 이름은 액세스가 아닌 MySql에 있으며 해당 스키마를 제어 할 권한이 없습니다. 이 프로세스는 정기적으로 자율적으로 실행해야하며 SQL Server에서 데이터를 준비하면이 목표가 조금 복잡해집니다. 우리는 테이블을 MySQL의 뷰로 대체하고 SSIS가 사용할 수있는 방식으로 테이블의 이름을 바꾸도록 클라이언트에게 권장했습니다. 이러한 변경은 MySQL 데이터베이스에 대한 다운 스트림 시스템이나 기존 쿼리에 영향을주지 않습니다. – cdonner

0

구성 설정 파일 my.ini를 <<Drive>>:\ProgramData\MySQL\MySQL Server 5.6\my.ini에두고 SQL 모드에 "ANSI_QUOTES"를 추가 할 수 있습니다. 예 : sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ANSI_QUOTES". 이렇게하면 SSIS 편집기에서 미리 보는 동안 문제가 해결됩니다.