SQL Server Management Studio에서 "실제" CSV 형식으로 내보내기 출력을 얻는 방법은 무엇입니까?
SQL Server Management Studio에서 실행 중인 조회가 있습니다(SQL Server 2005 데이터베이스에 연결).CSV 형식으로 데이터를 내보내고 싶습니다.각 열 사이에 쉼표만 넣는 wannabe CSV 형식이 아니라 문자열 주위에 따옴표를 넣는 "실제" CSV 형식입니다.이렇게 하면 쉼표 또는 따옴표가 있는 데이터를 내보낼 수 있습니다.
제가 본 예들은 모두 워너비 형식으로 한정되어 있습니다.문자열을 인용할 수 있는 옵션이 어디에 있는지 알 수 없습니다.
SSMS가 이러한 기본적인 작업을 수행할 수 없다면, 이를 쉽게 수행할 수 있는 다른 도구가 있을까요?데이터 덤프가 필요할 때마다 C# 프로그램을 작성할 필요가 없습니다.
SSMS 2012에서는 도구 -> 옵션 -> 쿼리 결과 -> SQL Server -> 그리드에 결과를 저장할 때 목록 구분자를 포함하는 문자열을 따옴표로 묶는 옵션이 있습니다.이러한 옵션이 얼마나 오랫동안 존재했는지는 모르겠지만, 저는 두 가지에 대해 당혹감을 느낍니다.
- 왜 기본적으로 켜져 있지 않은 거죠?
- CSV 내보내기 코드의 본질적인 부분이 아닌 옵션인 이유는 무엇입니까?
제대로 가져올 수 없는 CSV 내보내기가 기본 동작이라는 것은 믿을 수 없습니다.Excel도 마찬가지라는 걸 알았어요. 그것에도 옵션이 있는지 알아봐야겠어요.
한편, CSV 익스포터가 전혀 쓸모없는 기능이라고 호통치던 동료에게 이 기이한 기능을 알려준 덕분에, 이 링크가 제가 찾은 최고의 링크였기 때문에 향후 검색자의 이익을 위해 이 정보를 여기에 넣으려고 했습니다.
갱신하다
일반적인 해결 방법은 쿼리에 내장하는 것입니다.
SELECT '"' + REPLACE(CAST(column AS NVARCHAR(4000)), '"', '""') + '"' AS Header, ... FROM ...
이를 사용자 정의 함수로 만들 수도 있지만, 데이터 유형별로 별도의 함수를 만들어야 합니다.
이 옵션은 혼란스러운 상태에서 사용할 수 있지만 완벽하게 작동되지는 않는 것이 유감입니다.다음은 작동 중입니다.
- DB 컨텍스트 메뉴에서 "작업]> "데이터 내보내기"를 선택합니다(테이블 레벨에서도 작동하지 않음).
- 원본에서 "Microsoft OLE DB Provider for SQL Server"를 선택합니다.
- 에 대해 "Flat File..."을 선택하고 "Format"을 구분 기호로 지정하고 "Flat File..."을 지정합니다.'형식'은 '형식'입니다.
text qualifier쌍끌이로서 - 테이블 또는 쿼리를 선택합니다(쿼리로 작업했습니다).
- 마법사를 완료합니다.
당신은 가도 돼요!
이러한 설정의 조합이 다르면 잘못된 데이터 또는 부분 데이터가 출력될 수 있습니다.이는 마이크로소프트가 이러한 문제를 해결하는 것이 중요하다고 생각하지 않았기 때문입니다.결과를 파일로 보낼 때 CSV 파일이 어떻게 되는지 설명하려고 합니다.
좋은 결과를 얻으려면 다음을 수행하십시오.
새 쿼리 창 열기(새 탭/세션)... 그렇지 않으면 아래 구성이 손실되고 기본값으로 다시 설정됩니다.
따옴표 안에 따옴표를 처리할 쿼리를 작성하고 모든 문자열 데이터 유형을 따옴표로 묶습니다.또한 DBMS 및 프로그래밍 언어 문법마다 이스케이프된 이중 따옴표에 대해 서로 다른 구문을 사용할 수 있습니다(이 출력을 다른 시스템에 대한 입력으로 사용하는 경우).어떤 사람은 떤떤것것것 some some some some some some some some some some를 사용합니다.\". 어떤 사람들은 ...을 사용합니다"". XML은 . XML을 사용합니다" Microsoft가 이 기능을 무시한 이유일 수 있으므로 인수를 처리할 필요가 없습니다. Microsoft가 이 기능을 무시한 이유일 수 있으므로 이러한 인수를 처리할 필요가 없습니다.
새로운 시스템의 탈출 시퀀스는 ..입니다.새로운 시스템의 탈출 시퀀스는 다음과 같습니다.""요.
SELECT '"' + REPLACE(CAST(column1 AS VARCHAR(MAX)), '"', '""') + '"' FROM table1
새로운 시스템의 탈출 시퀀스는 ..입니다.새로운 시스템의 탈출 시퀀스는 다음과 같습니다.\"요.
SELECT '"' + REPLACE(CAST(column1 AS VARCHAR(MAX)), '"', '\"') + '"' FROM table1
구성은 다음과 같습니다.
Query Options > Results > "결과 복사 또는 저장 시 열 머리글 포함"을 선택했습니다.
쿼리 옵션 > 결과 > ".csv 결과를 저장할 때 목록 구분자가 포함된 문자열을 인용합니다." - BROKNED, 사용하지 마십시오!
Query Options > Results > others의 선택을 취소합니다.
쿼리 옵션 > 결과 > 텍스트 > 쉼표로 구분됩니다(오른쪽 상단 모서리 설정).
쿼리 옵션 > 결과 > 텍스트 > "결과 집합에 열 머리글 포함"을 선택했습니다.
쿼리 옵션 > 결과 > 텍스트 > 기타 선택을 취소합니다.
쿼리 옵션 > 결과 > 텍스트 > "각 열에 표시되는 최대 문자 수" - 문자열이 잘리지 않도록 최대 길이로 설정합니다.
Query > Results To File(파일로 결과)(세 가지 옵션 모두 전환)
쿼리를 실행합니다(F5).
보고서의 파일 이름을 입력하라는 메시지를 표시합니다.
결과를 보려면 파일을 여십시오.
참고: 정기적으로 이 작업을 수행해야 하는 경우에는 에서 이 작업을 수행할 수 있는 프로그램을 개발하는 것이 좋습니다.NET, Java 또는 사용자가 익숙한 모든 언어를 사용할 수 있습니다.그렇지 않으면 실수할 확률이 높습니다.그런 다음 SQL Server에서 내보내기를 정의하기 전에 가져올 시스템의 구문에 대해 잘 알고 있어야 합니다.
PowerShell을 통해 SSMS에서 CSV로 내보내기에 대해 어떻게 생각하십니까?이 게시물에서는 현재 선택한 쿼리를 CSV로 내보내는 PowerShell 스크립트로 전송하는 외부 도구를 SSMS에서 정의하는 방법을 설명합니다.
2016년 현재 쿼리 옵션에서 다음 옵션을 선택할 때의 기본 동작입니다.
열은 쉼표로 구분되고 쉼표가 포함된 필드는 큰따옴표로 캡슐화됩니다.
답변(특히 iacob)을 읽고 새로운 버전의 SSMS에서 제안된 옵션을 사용해 본 후, 옵션과 이러한 옵션이 내보내기 형식에 미치는 영향을 자세히 살펴보고 종합적으로 살펴보기로 했습니다.
쿼리 결과를 파일 옵션으로 내보냅니다.
(이는 SSMS v18.4와 함께 제공됩니다.)
- 이겁니다.
=> 데이터는 "CSV"로 내보내지지만 쉼표 대신 세미콜론을 구분 기호로 사용합니다.
=> 세미콜론 및/또는 큰따옴표가 포함된 값은 큰따옴표로 올바르게 묶습니다.
=> 큰따옴표는 큰따옴표 2개로 올바르게 이스케이프됩니다. - 결과를 복사하거나 저장할 때 열 머리글을 포함하세요." "알겠습니다."
=> 표시된 대로 수행합니다. 열 머리글을 첫 번째 줄로 추가합니다.
=> iacob의 anwer와 모순되는 이 옵션은 구분 기호를 쉼표로 변경하지 않으며 값을 큰따옴표로 묶고 큰따옴표를 올바르게 이스케이프하는 데 필요하지 않습니다. - 복사 또는 저장 시 CR/LF를 유지합니다." "CR/LF를 보관합니다."
=> 줄바꿈이 포함된 값은 큰따옴표로 적절히 묶고 줄바꿈은 유지됩니다.
두 옵션을 모두 선택하면 쉼표 대신 세미콜론을 구분 기호로 사용하더라도 CSV 형식이 가장 유용하게 사용됩니다.
남은 또 다른 문제는 NULL 값이 빈 필드가 아닌 "NULL"로 내보내지는 것입니다.
결론은 다음과 같습니다.
선택한 방법(데이터 작업 내보내기/CSV로 결과 내보내기)과 선택한 옵션에 관계없이 쉼표, 세미콜론, 큰따옴표 및 null 값을 적절히 지원하여 SSMS를 CSV로 내보낼 수 있는 유일한 방법은 없습니다.
주로 다음과 같은 기능을 사용합니다.
CREATE FUNCTION [dbo].[toExport]
(
@txt varchar(max)
)
RETURNS varchar(max)
AS
BEGIN
return REPLACE(REPLACE(REPLACE(@txt, ';', ','), CHAR(10), ' '), CHAR(13), ' ');
END
선택 항목에서 여기에 넣습니다.
SELECT dbo.toExport( column_name ) AS column_name FROM ....
SMSS 2012에서는 그리드를 마우스 오른쪽 버튼으로 클릭하고 결과를 다른 이름으로 저장하거나 모든 그리드(ctrl-A) 및 Ctrl-V를 Excel에 복사하기만 하면 됩니다.
MS Excel과 같이 열 문제 없이 데이터를 관리하는 가장 쉬운 방법입니다.
물론 ".csv 결과 저장 시 목록 구분자를 포함하는 문자열"을 csv 결과 저장 시 인용"에서 클릭해야 합니다.Tools -> Options -> Query Results -> Sql Server -> Results to Grid늘리다, 늘리다, 늘리다, 늘리다, 늘리다, 늘리다, 늘려요.Maximum Characters Retrieved잘 알겠습니다.
특히 Matthew Walton의 옵션 변경에 대한 답변이 정확하다고 생각합니다(아마도 내 데이터베이스가 이전 버전이기 때문에 사용할 수 없음).
또는 파이프 또는 쉼표로 구분하여 내보낼 수 있고 열 주위에 따옴표를 추가하는 것만을 원하는 경우 Powershell에서 이 명령을 실행하십시오.
Import-Csv 'C:\input.txt' -Delimiter '|' |
Export-Csv 'C:\output.csv' -Delimiter '|' -NoType
input.txt 파일입니다.
1|A|Test|ABC,PQR
명령이 실행된 후입니다.
"1"|"A"|"Test"|"ABC,PQR"
SSMS export를 사용하는 것보다 Excel을 열고 SQL 연결을 통해 데이터를 가져오는 것이 가장 쉬운 것 같습니다.SSMS 2016을 사용 중인데 .csv 결과를 저장할 때 "Quote strings contains contains list separators" 옵션이 없는 것 같습니다.
론입니다.
SSMS 도구 >> 옵션 >> 쿼리 결과 >> SQL Server >> 결과를 그리드로, 설정: ".csv 결과를 저장할 때 목록 구분자를 포함하는 문자열을 따옴표로 묶습니다."
또한 쉼표가 기본 구분 기호가 아닌 경우에도 중요합니다(노르딕 국가 등).제어판 >> 시계, 언어 및 지역 >> 지역 >> 추가 설정 여기에 이미지 설명을 입력합니다.
줄 바꿈이 포함된 셀도 인용합니다.
사이드노트로서 이렇게 생성된 파일을 Excel로 가져올 때 주의해야 할 사항이 있습니다.CSV 파일은 두 번 클릭하여 열어야 합니다(출처: https://superuser.com/questions/180964/how-to-open-semicolon-delimited-csv-files-in-us-version-of-excel). 또한 Excel 지역 설정이 를 사용하는 경우 구분 기호로 CSV 파일의 첫 번째 줄에 다음을 추가해야 합니다).
sep=을 클릭합니다.
SSMS만으로는 이 일을 할 수 없습니다.TOAD에는 CSV 옵션이 있습니다.이스케이프 형식인지 알 수 없습니다.SSIS가 옵션인 경우 문자열을 이스케이프하는 형식(참 CSV)으로 변환할 수 있지만 SSMS에는 없습니다.
만약 당신이 C# 프로그램을 작성해야 한다면, 메타데이터가 이스케이프를 필요로 하는 것을 알아낼 것이기 때문에, 나는 테이블을 조회한 후 쿼리를 실행하는 것을 고려할 것입니다.
대신 탭 구분 형식으로 내보낼 수 있습니다.
위의 모든 설정으로 인해 생성된 CSV my SSMS(SQL Server 2014)가 수정되지 않았고 탭으로 구분된 파일도 내보내지 않았기 때문에 동료와 저는 SSMS CSV를 읽기 가능한 CSV로 변환하는 컨버터 스크립트(Ruby)를 만들었습니다.
원본 파일의 인코딩, 구분자 및 줄 바꿈을 유지하고 마지막에는 정확한 바이트 일치 유효성 검사까지 수행합니다(파싱된(!) 입력 파일에서 SSMS 형식으로 파일을 만들고 두 파일을 비교합니다).
Matthew Walton의 답변으로 결과 세트 중 하나를 내보낼 수 있었지만 다른 결과 세트가 작동하지 않았습니다.SQL 데이터에서 xml 데이터로 작업 중이므로 쉼표로 구분된 출력이나 탭으로 구분된 출력을 사용할 수 없습니다.
판다를 활용한 기본적인 비단뱀 스크립트를 사용하여 이 문제를 해결했습니다.Panda는 모든 데이터를 깨끗하게 저장할 수 있는 데이터 프레임 개체를 가지고 있습니다. 그러면 해당 데이터 프레임을 Excel 시트로 내보낼 수 있습니다.이 링크를 사용하여 도움을 받았습니다. https://appdividend.com/2020/04/27/python-pandas-how-to-convert-sql-to-dataframe/
import pandas as pd
import pyodbc
conn = pyodbc.connect(connection_string)
cursor = conn.cursor()
sql_query = pd.read_sql_query(
'''SELECT TOP (1000) [column_1]
,[column_2]
,[column_3]
FROM [My_Table]
''', conn)
df = pd.DataFrame(sql_query, columns=['column_1', 'column_2', 'column_3'])
df.to_excel("exported_data.xlsx", index=False)
저는 다른 접근법을 제안하고 싶습니다.SO에 이 질문이 북마크되어 있습니다.많은 답변과 댓글에 투표했어요.그러나 SQL Management Studio의 쿼리에서 CSV 파일을 내보내는 일반 작업을 수행해야 할 때는 항상 복잡합니다.
가장 쉬운 해결책은 무료 Dbeaver와 같은 다른 도구를 사용하는 것입니다.
- Dbeaver 다중 플랫폼 데이터베이스 도구를 다운로드합니다(컴퓨터에 관리자 권한이 없는 경우 사용할 수 있는 휴대용 버전이 있습니다).
- 이를 실행하고 새 SQL Server 연결을 생성하십시오.
- 새 "Sql 편집기" 탭을 엽니다.
- 화살표를 클릭하여 쿼리를 실행합니다.
- 결과 그리드를 마우스 오른쪽 버튼으로 클릭하고 "데이터 내보내기"를 선택한 후 CSV를 선택합니다.
- Voila! 이제 CSV 파일이 제대로 포맷되었습니다.
미스터리는 없어요.다시 시작할 필요가 없습니다.효과가 있어요.
추가 정보: 먼저 선택하지 않고도 데이터를 내보낼 수 있습니다.테이블/데이터베이스에서 마우스 오른쪽 버튼을 클릭하면 데이터 내보내기 옵션이 나타납니다.
여기 좋은 설명들이 많네요.그러나 SQL Export Data Task 마법사를 사용하여 대상을 플랫 파일로 지정하면 텍스트 한정자를 "로 설정해야 했습니다.그게 날 속였어요.다른 설정은 모두 기본 설정입니다.
이는 제가 올바른 방향으로 나아갈 수 있도록 도와주었습니다.
언급URL : https://stackoverflow.com/questions/6115054/how-to-get-export-output-in-real-csv-format-in-sql-server-management-studio 입니다.
'programing' 카테고리의 다른 글
| IIS 응용 프로그램 풀이란 무엇입니까? (0) | 2023.04.25 |
|---|---|
| Azure SQL Server 데이터베이스를 사용하여 SSRS를 설정하는 방법 (0) | 2023.04.25 |
| C# 작업 스케줄링 라이브러리를 권장합니다. (0) | 2023.04.25 |
| 굵은 글씨와 굵은 글씨가 아닌 텍스트를 단일 UILabel로 표시합니까? (0) | 2023.04.25 |
| Eclipse: 파일 이름을 빠르게 검색합니다. (0) | 2023.04.25 |

