본문 바로가기

IT

MSSQL에서 구문에 쌍따옴표 쓰기

이건 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의 작업스케줄러와 프로시저를 이용하여, 실시간 데이터 동기화를 할 수 있고, 마이그레이션 하는데 

훨씬 빠르다.  


밤을 새는 야간작업이 필요없다는 뜻 .


지금도 아주 잘 돌아가고 있다. 


궁금하신 사항 있으시면 댓글로 남겨주세요.