SQL Server 2008에서 쿼리 결과를 .csv 파일로 내보내려면 어떻게해야합니까?
SQL Server 2008에서 쿼리 결과를 .csv 파일로 내보내려면 어떻게해야합니까?
답변:
쿼리 결과가 쉼표로 구분 된 텍스트로 표시됩니다.
쿼리 결과를 파일로 저장하려면 : Ctrl + Shift + F
Ctrl+Shift+F
출력 모드 만 변경되며 이미 쿼리를 실행 한 경우 결과에 영향을 미치지 않습니다. 이를 반영하려면 쿼리를 다시 실행해야합니다. "결과를 파일로"모드에서 실행할 때 결과를 저장할 위치를 묻는 메시지가 나타납니다.
나는 이것이 조금 오래되었다는 것을 알고 있지만 여기 훨씬 쉬운 방법이 있습니다 ...
기본 설정으로 쿼리를 실행하십시오 (결과가 그리드 형식이 아닌 경우 그리드 형식으로 입력하십시오 (아래 참조)).
그리드 결과를 마우스 오른쪽 버튼으로 클릭하고 "결과를 다른 이름으로 저장"을 클릭하여 저장하십시오.
결과가 모눈 형식이 아닌 경우 쿼리를 작성하는 위치를 마우스 오른쪽 단추로 클릭하고 "결과"를 가리키고 "결과를 모눈"을 클릭하십시오.
열 머리글을 캡처하지 마십시오.
행운을 빕니다!
PowerShell을 사용할 수 있습니다
$AttachmentPath = "CV File location"
$QueryFmt= "Query"
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath
Add-PSSnapin SqlServerCmdletSnapin100
와 Add-PSSnapin SqlServerProviderSnapin100
.
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Install-Module -Name SqlServer
(그러나 Cmdlet에서 스냅 할 필요는 없습니다). 또한 명령을 스크립트에 저장했는데 실행 정책을 변경할 때까지 실행되지 않습니다 Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
.
RemoteSigned
실행 정책으로 충분 하다고 생각 합니다.
문제의 데이터베이스가 로컬 인 경우 다음은 쿼리 결과를 CSV 파일 로 내보내는 가장 강력한 방법 일 것입니다 (즉, 가장 많은 제어권을 제공함).
이 과정을 철저히 수행 한 후 다음 옵션이 최선의 방법이라는 것을 알았습니다.
PowerShell 스크립트
$dbname = "**YOUR_DB_NAME_WITHOUT_STARS**"
$AttachmentPath = "c:\\export.csv"
$QueryFmt= @"
**YOUR_QUERY_WITHOUT_STARS**
"@
Invoke-Sqlcmd -ServerInstance **SERVER_NAME_WITHOUT_STARS** -Database $dbname -Query $QueryFmt | Export-CSV $AttachmentPath -NoTypeInformation
관리자 권한으로 PowerShell 실행
& "c:\path_to_your_ps1_file.ps1"
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
NS의 대답을 바탕으로 필드 주위에 따옴표와 쉼표로 구분 하여 CSV 파일로 내보내는 PowerShell 스크립트가 있으며 파일의 헤더 정보를 건너 뜁니다.
add-pssnapin sqlserverprovidersnapin100
add-pssnapin sqlservercmdletsnapin100
$qry = @"
Select
*
From
tablename
"@
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $qry | convertto-CSV -notype | select -skip 1 > "full path and filename.csv"
처음 두 줄은 Invoke-SqlCmd 명령 을 사용할 수있게합니다.
를 사용하여 T-SQL :
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]')
SELECT Field1, Field2, Field3 FROM DatabaseName
그러나 몇 가지주의 사항이 있습니다.
Microsoft.ACE.OLEDB.12.0 공급자를 사용할 수 있어야합니다. Jet 4.0 공급자도 작동하지만 고대 버전이므로 대신 사용했습니다.
.CSV 파일이 이미 존재해야합니다. 헤더 ( HDR=YES
)를 사용 하는 경우 .CSV 파일의 첫 번째 줄이 모든 필드의 구분 된 목록인지 확인하십시오.
QueryToDoc ( http://www.querytodoc.com )을 사용할 수 있습니다 . SQL 데이터베이스에 대해 쿼리를 작성하고 구분 기호를 선택한 후 결과를 Excel, Word, HTML 또는 CSV로 내보낼 수 있습니다.
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]')
SELECT Field1, Field2, Field3 FROM DatabaseName
@Slogmeister Extraordinaire Quoted가 정확합니다.
1> 열이 이미있는 파일 2> Office가 설치되어 있어야합니다.
직면 한 오류
메시지 7303, 수준 16, 상태 1, 줄 1 연결된 서버 "(null)"에 대한 OLE DB 공급자 "Microsoft.ACE.OLEDB.12.0"의 데이터 원본 개체를 초기화 할 수 없습니다. "
메시지 15281, 수준 16, 상태 1, 줄 1 SQL Server는이 구성 요소가이 서버에 대한 보안 구성의 일부로 해제되어 있으므로 구성 요소 'Ad Hoc Distributed Queries'의 STATEMENT 'OpenRowset / OpenDatasource'에 대한 액세스를 차단했습니다. 시스템 관리자는 sp_configure를 사용하여 'Ad Hoc Distributed Queries'를 사용할 수 있습니다. 'Ad Hoc Distributed Queries'사용에 대한 자세한 내용은 SQL Server 온라인 설명서에서 'Ad Hoc Distributed Queries'를 검색하십시오.
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 0
RECONFIGURE
GO
Powershell을 사용하지 않으려는 경우이 답변은 8kb의 훌륭한 답변을 변형 한 것입니다. 유일한 차이점은 출력 형식으로 CSV를 선택하는 대신 탭 구분을 선택한다는 것입니다. 이렇게하면 데이터에 쉼표가 있으면 Excel의 셀을 건너 뛰지 않습니다. 또한 Excel의 기본 구분 기호를 탭으로 설정 한 경우 SSMS 쿼리 결과를 모두 복사 (CTRL-A, CTRL-C)하고 Excel에 붙여 넣기 (파일로 저장하거나 Excel로 가져올 필요가 없음) ) :
이제 쿼리를 실행 한 다음 CTRL-A를 수행하여 모든 결과를 선택한 다음 CTRL-C를 사용하여 클립 보드에 복사 한 다음 Excel 2013으로 전환하고 (2007 년에도 작동 할 수도 있음) 붙여 넣기를 Excel의 기본값으로 가정 할 수 있습니다 구분 기호가 탭으로 설정되어 있습니다.
예, 서버에 직접 액세스 할 수 있으면이 모든 것이 가능합니다. 그러나 웹 / 응용 프로그램 서버에서만 서버에 액세스 할 수 있다면 어떨까요? 글쎄, 상황은 우리와 함께 오래 전부터 있었고 솔루션은 SQL Server Export to CSV 였습니다.