JKUN

Welcome To The Jkun.net

Blog

OPENQUERY 를 이용한 INSERT/SELECT/UPDATE

2016.01.12 18:54 DataBase/MS-SQL



INSERT INTO OPENQUERY([LINKED SERVER], '  SELECT [COLUMNS] FROM [TABLE]')
VALUES ~ SELECT [ '이건 입맛대로~' ]

* INSERT, UPDATE, DELETE, SELECT 모두 OPENQUERY(연결된 서버, 'SQL문자열') 로
동일합니다.

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

excel linked server 메시지 7303, 수준 16, 상태 1, 줄 31

2016.01.12 18:46 DataBase/MS-SQL


출처 : http://sqlsql.tistory.com/391



64bit sql server 에 excel 2013을 링크드 서버나 직접쿼리를 할 때 

일단 드라이버를 깔아야 한다. http://www.microsoft.com/en-us/download/details.aspx?id=13255


그런 후, 드라이버의 inprocess 설정을 한다. 

USE [master]

GO

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1

GO

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1

GO


계정설정 

혹시 NT Service\MSSQL$SQL2012 이런식으로 되어 있으면 -> 로컬시스템으로 바꾼다. ㅠ.,ㅠ

아니면 해당 폴더에 위 계정이 액세스 가능하게 하면 될 듯 하다. appdata\local\temp 역시 권한이 필요한듯 

이런거 다 귀찮으면 로컬 시스템으로 변경~


NT Service\MSSQL$SQL2012 였을때 에러 메시지 

연결된 서버 "(null)"의 OLE DB 공급자 "Microsoft.ACE.OLEDB.12.0"이(가) 메시지 "지정되지 않은 오류입니다."을(를) 반환했습니다.

메시지 7303, 수준 16, 상태 1, 줄 31

연결된 서버 "(null)"에 대한 OLE DB 공급자 "Microsoft.ACE.OLEDB.12.0"의 데이터 원본 개체를 초기화할 수 없습니다.


링크드 서버 연결 명령어 

/****** Object:  LinkedServer [bb]    Script Date: 2015-04-23 오전 11:08:34 ******/

EXEC master.dbo.sp_addlinkedserver @server = N'bb', @srvproduct=N'ACE', @provider=N'Microsoft.ACE.OLEDB.12.0', @datasrc=N'c:\sqltag\Book1.xlsx', @provstr=N'Excel 12.0; HDR=Yes'

 /* For security reasons the linked server remote logins password is changed with ######## */

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'bb',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL

GO


인프로세스 쿼리 방법 

SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0', 'Data Source=c:\sqltag\Book1.xlsx;Extended Properties=Excel 12.0')...[Sheet1$]


SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; HDR=YES; IMEX=1; Database=F:\cmdb\fault티켓\Book1.xlsx', 'SELECT * FROM [Sheet1$]')


SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; 

HDR=YES; IMEX=1; Database=\\127.0.0.1\f$\cmdb\fault티켓\FQ261_2011.xlsx', 'SELECT * FROM [sheet1$]')


SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; 
HDR=NO; IMEX=1; Database=c:\sqltag\Book1.xlsx', 'SELECT * FROM [Sheet1$]')

SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0', 'Data Source=\\127.0.0.1\c$\sqltag\Book1.xlsx;Extended Properties=EXCEL 12.0')...[Sheet1$] ;


-- 읽어보기 귀찮다.

-- 스타트 계정 로컬시스템으로 변경 후
exec sp_configure 'Ad Hoc Distributed Queries', 1
reconfigure with override

USE [master]
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1
GO

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; HDR=YES; IMEX=1; Database=C:\event\faultPrco_2010q1.xls', 'SELECT * FROM [data$]')

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

MSSQL 메시지 7347 - 예상 데이터 길이와 일치하지 않는 데이터를 반환했습니다.

2016.01.12 18:44 DataBase/MS-SQL


메시지 7347, 수준 16

LINKED SERVER (연결된 서버) 를 통하여 쿼리시 (OPENROWSET, OPENQUERY)


오라클이나 MySQL 에서  "예상 데이터 길이와 일치하지 않는 데이터를 반환했습니다." 라는

메세지는 지금까지의 경험(짧은^^;;) 으로는 숫자형의 데이터를 문자형으로 전환하면

되었던 것 같다.

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

연결된 서버(Linked Server) 를 이용한 조건별 다수 업데이트

2012.07.02 09:19 DataBase/MS-SQL


졸다가 업데이트를 조건을 안걸고 F5 키를 눌러버리고 말았다..

그래서 다행히도 관계형이 아닌 테이블이어서 원본 테이블에는 지장이 없는 테이블이었기에 (운좋았다~ㅋㅋ)

조인을 걸어서 수정을 할 수 있게 했는데 까먹으니까 써놓자~

 

  UPDATE MemberInfor

  SET MemberInfor.member_id = b.member_id

  FROM

  -- 실제 조인 연동 (링크드 서버와)

   MemberInfor a INNER JOIN (

    SELECT * FROM OPENQUERY(LinkedServerName, '

       SELECT member_id, member_name FROM TestDB.dbo.MemberInfor a, TestDB.dbo.MemberInfor b

       WHERE a.member_id = b.member_id

    ')) b

    ON  a.member_id = b.member_id

    AND a.server_id = b.server_id

  WHERE a.server_id = 24

  AND a.server_id NOT IN ('51','52','54','61','62','63','67','68','69','70')

 

반드시 링크드 서버가 활성화(연결)되어있어야만 구동이 가능하다.

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

MySQL 에서 MS-SQL 로 데이터 이관 (MySQL ODBC Connector)

2012.01.10 17:04 DataBase/MS-SQL


이미 많이들 알고 있겠지만 난 개인적으로 처음이어서 포스팅을 한다.
MySQL 에서 MS-SQL 로 데이터 이관하는 작업이다.

테스트 환경은 다음과 같다.

* 원본 위치 환경
OS : Windows 2008 R2 Enterprise 64bit
DBMS : MS-SQL Server 2008 R2

* 이관 위치 환경
OS : Windows 2008 R2 Enterprise 64bit
DBMS : MySQL 5.1

이관될 위치 환경은 APMSETUP7 으로 설정된 환경이다.

순서는 아래와 같다.

먼저 MySQL ODBC Connector 를 다운로드 받는다. (다운로드 링크를 누른다.)


 
다운로드 받은 파일을 설치하고, 시작 → 관리도구  →  데이터 원본(ODBC) 를 실행한다.


그리고 사용자 DSN 탭에 추가 버튼을 누른다. (난 이미 추가되있어서..)


그럼 다음과 같은 새 데이터 원본 만들기 창이 나타난다.



저 상태에서 MySQL ODBC 5.1 Driver 항목을 선택하고 더블클릭 한다.

그럼 아래와 같은 ODBC Connector 창이 나타난다. 그럼 MySQL 계정정보를 입력하자.
여기서 Data Source Name 은 MySQL 에서 사용할 이름이다. 입맛에 맞게 설정하자.
 
r


여기까지 입력이 완료하고 OK 버튼을 누르고 마침 버튼을 누른다.
그럼 ODBC에 사용자 DSN 항목에 작성한 이름이 추가되어 나타나있는것을 확인할 수 있다.

[##_http://www.jkun.net/script/powerEditor/pages/1C%7Ccfile10.uf@191352334F0BE8E432AC5B.PNG%7Cwidth=%22533%22%20height=%22379%22%20alt=%22%22%20filename=%224.PNG%22%20filemime=%22image/jpeg%22%7C_##]
 그리고 이제 부터 MS-SQL 2008 에서 적용하는 과정이다.
 이미 Linked Server (연결된 서버) 를 사용해 본 사람들이 쉽게 할 수 있다. 
 아래와 같이 연결된 서버를 실행한다.


그리고 새 연결된 서버 창이 나타나면 정보를 입력한다.
공급자 : Microsoft OLE DB Provider for ODBC Driver
제품이름 : MySQL
데이터 원본 : 사용할 이름
공급자 문자열 : Driver={MySQL ODBC 5.1 Driver}; Server=서버; Database=데이터베이스;
위치 : 사용할 이름 


그리고 보안 탭에 MySQL 계정정보를 입력한다.

 
그리고 확인버튼을 누른다. 이에 만일 데이터액세스가 안되는 경우 서버 옵션 탭에
RPC 항목을 True 로 바꾸어 준다.
 


그리고 연결된 서버공급자 항목MSDASQL 항목에 속성을 활성화한다.
 


그리고 공급자 옵션 창이 나타나면 다음 항목에 체크해 준다.
중첩쿼리, 0 수준만, Inprocess 허용, 트랜잭션되지 않은 업데이트, LIKE 연산자를 지원합니다.


그리고 확인하고 마무리 지으면 다음처럼 활성화된 항목을 확인하며 MySQL 쪽에 데이터베이스 정보가
나오는 것을 확인.
 


그리고 조낸 캡쳐를 떠가며 작성한 사람을 위해서 댓글을 달아주는 센스까지 하면
완전 마무리가 된다.

MySQL 에서 MS-SQL 로 데이터 이관, 
MySQL 에서 MS-SQL 로 데이터 옮기기,

저작자 표시
신고
현재 5 개의 댓글이 있습니다.

김도현 2012.01.26 11:30 신고

링크드로 연결 시키는 방법인가요?
찾고 있는 자료였는데 감사합니다.
적용시켜 보겠습니다.


김도현 2012.01.26 12:15 신고

그런데 혹시 반대의 경우도 적용 가능 할까요?


나그네 2012.02.23 19:33 신고

자세한 설명 감사합니다..
다른 자료들은 그림도 없고 비슷한 내용을 두리뭉실하게 설명해놓았는데..
여기는 설명이 자세해서 따라하기 쉬웠습니다..

작성자 최고.. !!


csy3596 2013.02.20 11:46 신고

감사합니다.
MSSQL에 MYSQL을 연결시킬때 마다 MSSQL쪽이 죽어버려서 곤란한 상황에 있었는데 작성자님 덕분에 해결할 수 있었습니다.


  • JKUN Dev. Jkun 2013.02.20 12:25 신고

    아. ㅎㅎ 도움이 되셨다니 다행입니다.
    센스댓글 감사합니다~ ^^

Comment