이건 MSSQL에서 MYSQL로 DB마이그레이션 작업을 하면서 필요에 의해 찾다보니 알게되었다.
오픈쿼리문을 테이블 컬럼에 담아두고 뽑아서 사용하려고하면 혿따옴표가 두개씩들어간경우가 있다.
이때 보통 REPLACE함수를 이용해서 치환을 하려하지만, 기본적으로 SQL에서는 혿따옴표 두개를 한개로 치환하기는 어렵다.
1) 들어있는값이 아래와 같은경우
INSERT OPENQUERY(CLOUD_DB, N''SELECT COL1,COL2,COL3 FROM CLOUD.DATA_MST'') VALUES(''DATA1'',''DATA2'',''DATA3'')
보통 replace를 이용하여 추출하려 할것이다. 트리거를 이용하여 db에 넣을때는 문자열을 맞추기 위해 저렇게 넣었지만,
오픈쿼리를 이용하여 실제 insert할땐, 혿따옴표 두개씩달린걸 한개씩으로 변경해줘야 한다.
아래처럼 replace를 한다면??
SELECT TOP 1000 [idx] ,replace([querystring],'''',''') ,[result] ,[_date] FROM [dbo].[MSSQL_MYSQL]
혿따옴표 두개를 한개로 바꾸려고 시도했을때.. 저렇게 하면 내가 원하는대로 추출할수 없다. 쌍따옴표만 넣을수 있었다면...
이럴때 사용할 수 있는 방법은 set quoted_identifier off on 기능이다.
set quoted_identifier off SELECT TOP 1000 [idx] ,replace([querystring],"''","'") ,[result] ,[_date] FROM .[dbo].[MSSQL_MYSQL] set quoted_identifier on
위와 아래에 off, on을 씌워주고 replace에 쌍따옴표를 넣고 혿따옴표 두개를 한개로 치환한다고
정의해주면 아래와 같은 결과를 추출할수 있다.
INSERT OPENQUERY(CLOUD_DB, N'SELECT COL1,COL2,COL3 FROM CLOUD.DATA_MST') VALUES('DATA1', 'DATA2', 'DATA3')
결과가 이렇게 추출되었다면, MSSQL의 작업스케줄러와 프로시저를 이용하여, 실시간 데이터 동기화를 할 수 있고, 마이그레이션 하는데
훨씬 빠르다.
밤을 새는 야간작업이 필요없다는 뜻 .
지금도 아주 잘 돌아가고 있다.
궁금하신 사항 있으시면 댓글로 남겨주세요.
'IT' 카테고리의 다른 글
[mssql] 반환된 날짜값 substring 을 이용하여 자르기 (0) | 2018.10.27 |
---|---|
mssql에서 mysql로 마이그레이션을 위해 linked server(연결된서버) 설정하기 (0) | 2018.10.27 |
javascript 파일 업로드 용량 확인 후 제한하기 (0) | 2018.10.27 |
자바스크립트로 SHA-512 암호화 하기 (0) | 2018.10.27 |
classic asp sha512 암호화 (0) | 2018.10.27 |