2012-03-13 2 views
2

SQL 서버에서 MySql 테이블을 업데이트하는 쿼리를 작성하는 데 도움이 필요합니다. 연결된 서버를 만들고 선택 쿼리가 제대로 작동하지만 업데이트하는 동안 오류가 발생합니다. 나는 그러한 유형의 질문을 작성하는 데있어서 정말 새로운 것이므로 오류 메시지를 이해하고 이것이 의미하는 바를 이해하도록 도와주십시오.MS SQL 서버에서 MySql 업데이트

내 업데이트 쿼리 :

UPDATE openquery(stagedb_za, 'Select acm_flag FROM aol_center WHERE nid = 6439') 
Set acm_flag = 'P' 

오류 :

OLE DB provider "MSDASQL" for linked server "stagedb_za" returned message "Row cannot be located for updating. Some values may have been changed since it was last read.". Msg 7343, Level 16, State 4, Line 1 The OLE DB provider "MSDASQL" for linked server could not UPDATE table "[MSDASQL]". The rowset was using optimistic concurrency and the value of a column has been changed after the containing row was last fetched or resynchronized.

답변

3

좋아, 내가 대답을 얻었다. 열 값을 업데이트하고 새 값이 기존 값과 같으면 아무 것도 변경되지 않으므로 처리되므로 업데이트가 수행되지 않습니다.

내 경우에는 acm_flag를 'P'로 업데이트했지만 가치가 이미 'P'이므로 업데이트가 발생하지 않았습니다. 다른 값으로 업데이트하려고 시도했을 때 제대로 작동했습니다.

0

내가 아는 한, 오픈 쿼리를 통해 어떤 것도 업데이트 할 수 없습니다. Openquery는 원격 MySQL 서버에서 선택 스크립트를 실행하고 결과를 가져 와서 작업 환경에서 처리합니다.

이 선택 항목은 업데이트 할 수없는 결과 집합이므로, 그 전에는 업데이트 할 생각이 없습니다.

6

이 모든 문제는 MySQL ODBC 커넥터의 설정과 함께 사라집니다.

MySQL에 연결중인 SQL Server에서 연결된 서버가 사용하는 MySQL ODBC 연결의 구성 화면으로 이동하십시오. "세부 정보"를 엽니 다. "커서/결과"탭에서 "영향을받는 행 대신 일치하는 행 반환"체크 박스를 놓습니다.

구성이 변경되면 MySQL 필드 값을 이미있는 값으로 설정하는 업데이트는 오류를 반환하지 않습니다.

다른 포럼에서이 사실을 발견하기 전에 필자는 필드 기준으로 잘못된 값을 걸러 내기 위해 많은 코드를 넣었습니다. 이것은 쉽다.