2012-01-11 3 views
-1

Excel에서 데이터베이스로 데이터를 가져와야합니다. 내 Excel 시트의 데이터를 데이터베이스의 기존 테이블에 삽입해야합니다.SQL Server 2008로 Excel 데이터 가져 오기

나는 SQL 마법사의 도움으로 데이터를 가져 오려고 시도했다. 먼저 임시 테이블에 가져온 다음 삽입 쿼리를 사용하여 대상 테이블에 데이터를 가져 왔습니다. 하지만 제대로 작동하지 않는 것 같습니다.

그래서 plz는 데이터를 가져 오는 좋은 방법을 제안합니다. 또한 가져 오기위한 좋은 SQL 스크립트를 제안하는 것이 좋습니다.

+1

입니까? – Sparky

+1

"어떤 것이 좋지 않다"는 것은 무엇을 의미합니까? 무슨 일 했니? – Blanthor

답변

0

기존 테이블과 테이블의 키에 대해 아무것도 언급하고 그래서 그냥 다음 명령을 xltest.xls 파일 시트에서 모든 데이터 선택, 당신에게 밀어주고, 파일을 엑셀하지 않았다 ('customrs')를

SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
    'Excel 8.0;Database=C:\test\xltest.xls', [Customers$]) 

이 시점부터 데이터베이스 구조에 따라 기존 데이터를 가져 오거나 병합하는 방법에 달려 있습니다.

1
내가 .xlsx 파일에 내가 다음 .xls (97-2003 버전)과 같은 스프레드 시트를 저장

SELECT * 
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Excel 8.0;Database=C:\xls_to_sql\xltest.xlsx', [Sheet1$]) 

(버전 14.0.6112.2500 64 비트 Microsoft Excel 파일을) 이전의 대답을 사용하여 시도하고 다시 시도

.

Msg 7308, Level 16, State 1, Line 1 
OLE DB provider 'Microsoft.Jet.OLEDB.4.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode. 

SQL 서버에 대한 정보 :

마이크로 소프트 SQL Server Management Studio를 10.50.1617.0 마이크로 소프트 분석 서비스 클라이언트 도구 10.50.1617.0

SELECT * 
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Excel 8.0;Database=C:\xls_to_sql\xltest.xls', [Sheet1$]) 

봇 시간이 나는 같은 오류 메시지를 받았습니다 Microsoft 데이터 액세스 구성 요소 (MDAC) 6.1.7601.17514 Microsoft MSXML 2.6 3.0 6.0 Microsoft Internet Explorer 9.0.8112.16421 Mi crosoft .NET 프레임 워크 2.0.50727.5448 운영 체제 6.1.7601

나는 Microsoft.Jet.OLEDB.4.0이없는 또는 적어도 나는 그것을 얻을하는 방법을 모르겠어요. 또한 32 비트 모드에서 모든 것을 실행하는 방법이 문제의 원인인지 여부를 알지 못합니다. 32 비트 모드로 실행하는 데 도움을 주셔서 감사 드리며 Microsoft.Jet.OLEDB.4.0을 다운로드하고 설치하는 이유는 무엇입니까?

SQL Server 2005에 게시 된 링크 된 서버 방법을 시도했지만 자습서에서 언급 한 Microsoft.Jet.OLEDB.4.0 옵션이 없습니다. http://support.microsoft.com/kb/321686을 참조하십시오.

0

은 스프레드 시트를 .xls (97-2003 버전) 형식으로 저장하고 임시 파일의 SQL로 가져옵니다. 가져온 후에 이러한 데이터는 임시 테이블 필드 길이가 원본과 비슷한지 확인합니다.

는 orginal 한 테이블을 업데이트 할 문 아래 사용

나는 보통 이렇게 세 가지 방법이 있습니다
insert into orginal (field1, field2) 
select field1, field2 from temp 
0

.

  1. 워크 시트 내부에서 VBA를 사용하십시오. 이것은 단지 한 번만하는 경우에 너무 많은 노력을하는 개발 작업을 포함합니다.이 워크 시트를 여러 번 사용하려는 경우 유용합니다.
  2. 워크 시트 내에서 매크로 조합을 사용하여 SQL Management Studio에 붙여 넣기 쿼리를 삽입하거나 유사한 SQL 클라이언트 을 삽입하고 삽입을 실행하십시오.
  3. 같이, I 워크 시트로 변환 할 CSV 파일을 복사 대량 복사 명령 줄 도구를 사용하여 파일의 경우 bcp [dbname].[dbo].[myTableName] in data1.csv -T -SmyServerName -c -t^| > log1.txt
3

2007 버전을 엑셀 (* .XLSX)

INSERT INTO MyTable 
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
'Excel 12.0;Database=D:\test.xlsx', [Customer$]) 
파일의 경우

엑셀 97-2003 버전 (* .XLS)

INSERT INTO MyTable 
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Excel 8.0;Database=D:\test.xls', [Customer$]) 
+1

[Customer $]은 무엇입니까 –

+0

@AlirezaMassali [Customer $]는 파일 test.xls의 시트 이름입니다. – Fauzi88

0

당신이 .XLSX에 64 비트 SQL Server를 가져와야 할 경우, 64을 설치하십시오 bit Microsoft Access 데이터베이스 엔진. 다음 사용할 수, \ data.xlsx,의 MyData라는 시트를 가지고있는 :

은 C에서 데이터를 가져올 예를 들어, http://www.microsoft.com/en-us/download/details.aspx?id=13255

참조 스프레드 시트에서 얼마나 많은 열

SELECT * 
    FROM OPENROWSET ('Microsoft.ACE.OLEDB.12.0' 
        , 'Excel 12.0;database=c:\data.xlsx;IMEX=1' 
        , 'SELECT * FROM [MyData$]') 
관련 문제