데이터베이스에서 CSV 파일로 테이블 내보내기
로 구분하여 내보내기: SQL Server로 내보내기csv
sql Server 가져오기 내보내기 마법사를 사용하지 않는 경우
자동화에 쿼리를 사용하고 싶기 때문에 쿼리를 사용하고 싶습니다.
가능합니까?저는 그것을 검색했지만 좋은 답을 찾지 못했습니다.
몇 가지 아이디어:
SQL Server Management Studio에서
1. Run a SELECT statement to filter your data
2. Click on the top-left corner to select all rows
3. Right-click to copy all the selected
4. Paste the copied content on Microsoft Excel
5. Save as CSV
SQLCMD(명령 프롬프트) 사용
예:
명령 프롬프트에서 쿼리를 실행하여 파일로 내보낼 수 있습니다.
sqlcmd -S . -d DatabaseName -E -s, -W -Q "SELECT * FROM TableName" > C:\Test.csv
따옴표를 구분 기호로 설정하지 않는 한 따옴표 -s', ''를 사용하지 않고 따옴표 -s만 사용하지 마십시오.
자세한 내용은 여기: ExcelSQL Server
주의:
이 접근 방식은 파일 하단에 "Rows impected" 정보가 있지만 쿼리 자체에서 "SET NO COUNT ON"을 사용하여 이 정보를 제거할 수 있습니다.
실제 쿼리(예: "EXEC Database.dbo") 대신 저장 프로시저를 실행할 수 있습니다.저장 프로시저")
모든 프로그래밍 언어 또는 배치 파일을 사용하여 이를 자동화할 수 있습니다.
BCP(명령 프롬프트) 사용
예:
bcp "SELECT * FROM Database.dbo.Table" queryout C:\Test.csv -c -t',' -T -S .\SQLEXPRESS
쉼표 구분 기호를 -t', vs 그냥 -t로 인용하는 것이 중요합니다.
자세한 내용은 여기: bcp 유틸리티
주의:
- SQLCMD를 사용할 때와 같이 실제 쿼리 대신 저장 프로시저를 실행할 수 있습니다.
- 모든 프로그래밍 언어 또는 배치 파일을 사용하여 이를 자동화할 수 있습니다.
Excel로 내보내기 위해 찾은 옵션이 있습니다(CSV용으로 수정 가능하다고 생각합니다.
insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;',
'SELECT * FROM [SheetName$]') select * from SQLServerTable
또한 다음 Node.js 모듈을 사용하여 쉽게 수행할 수 있습니다.
https://www.npmjs.com/package/mssql-to-csv
var mssqlExport = require('mssql-to-csv')
// All config options supported by https://www.npmjs.com/package/mssql
var dbconfig = {
user: 'username',
password: 'pass',
server: 'servername',
database: 'dbname',
requestTimeout: 320000,
pool: {
max: 20,
min: 12,
idleTimeoutMillis: 30000
}
};
var options = {
ignoreList: ["sysdiagrams"], // tables to ignore
tables: [], // empty to export all the tables
outputDirectory: 'somedir',
log: true
};
mssqlExport(dbconfig, options).then(function(){
console.log("All done successfully!");
process.exit(0);
}).catch(function(err){
console.log(err.toString());
process.exit(-1);
});
SSMS나 프로그래밍 언어로 후프를 거칠 필요가 없습니다.
관리자 권한으로 PowerShell 프롬프트를 실행한 후 다음을 수행합니다.
Install-Module -Name SqlServer
설치가 완료되면 다음과 같이 테이블을 CSV로 내보낼 수 있습니다.
Invoke-Sqlcmd -Query "SELECT * FROM [mydatabase].[dbo].[mytable]" -ServerInstance "MYSQLSERVER" | Export-Csv -Path "c:\temp\output.csv" -NoTypeInformation
그것을 에 넣을 수 있습니다.PS1 스크립트를 작성하고 원하는 대로 실행합니다.
rsubmit;
options missing=0;
ods listing close;
ods csv file='\\FILE_PATH_and_Name_of_report.csv';
proc sql;
SELECT *
FROM `YOUR_FINAL_TABLE_NAME';
quit;
ods csv close;
endrsubmit;
SQL Server Management Studio에서
내보낼 테이블에서 마우스 오른쪽 단추를 누른 후 "모든 행 선택"을 선택합니다.
결과 창을 마우스 오른쪽 버튼으로 클릭하고 "다른 이름으로 결과 저장..."을 선택합니다."
SQL Server Management Studio 조회 창
- 모든 결과 설정 값 선택
- 마우스 오른쪽 단추를 클릭하고 "다른 이름으로 결과 저장"을 선택합니다.
- CSV 파일로 저장
저는 바로 그런 일을 하는 작은 도구를 썼습니다.Github에서 코드를 사용할 수 있습니다.
하나 이상의 SQL 쿼리 결과를 하나 이상의 CSV 파일에 덤프하려면 다음과 같이 하십시오.
java -jar sql_dumper.jar /path/sql/files/ /path/out/ user pass jdbcString
건배.
그리고 어떤 이유로 모든 테이블이 필요할 때?
SSMS에서 다음 명령을 생성할 수 있습니다.
SELECT
CONCAT('sqlcmd -S ',
'Your(local?)SERVERhere'
,' -d',
'YourDB'
,' -E -s, -W -Q "SELECT * FROM ',
TABLE_NAME,
'" >',
TABLE_NAME,
'.csv') FROM INFORMATION_SCHEMA.TABLES
그리고 다음과 같은 행을 다시 가져옵니다.
sqlcmd -S ... -d... -E -s, -W -Q "SELECT * FROM table1" >table1.csv
sqlcmd -S ... -d... -E -s, -W -Q "SELECT * FROM table2" >table2.csv
...
더 나은 TAB를 구분 기호로 사용하는 옵션도 있지만, 이상한 유니코드 문자가 필요합니다. CMD에서 Alt+9를 사용하는 것은 ○(Unicode CB25)와 같았지만 배치되지 않은 명령줄에 복사/삭제로만 작동합니다.
아마도 죽은 말일 것입니다. 하지만 얼마 전에 저도 같은 것을 하려고 시도하다가 우연히 STP를 만드는 스크립트를 발견했습니다. STP는 제가 찾고 있던 것을 하려고 했지만, 몇 가지 주의가 필요했습니다.업데이트를 게시할 스크립트를 찾은 위치를 추적하기 위해 이 스레드를 우연히 발견했고 공유하기에 좋은 위치인 것 같습니다.
이 STP는 스키마 이름, 테이블 이름 및 Y 또는 N[헤더 포함 또는 제외]을 입력 매개 변수로 사용하고 제공된 테이블을 쿼리하여 각 행을 쉼표로 구분된 따옴표 형식으로 출력합니다.
저는 원본 스크립트에 많은 수정/변경을 가했지만, 그 핵심은 OP에서 나온 것입니다.
스크립트는 다음과 같습니다.
IF OBJECT_ID('get_csvFormat', 'P') IS NOT NULL
DROP PROCEDURE get_csvFormat
GO
CREATE PROCEDURE get_csvFormat(@schemaname VARCHAR(20), @tablename VARCHAR(30),@header char(1))
AS
BEGIN
IF ISNULL(@tablename, '') = ''
BEGIN
PRINT('NO TABLE NAME SUPPLIED, UNABLE TO CONTINUE')
RETURN
END
ELSE
BEGIN
DECLARE @cols VARCHAR(MAX), @sqlstrs VARCHAR(MAX), @heading VARCHAR(MAX), @schemaid int
--if no schemaname provided, default to dbo
IF ISNULL(@schemaname, '') = ''
SELECT @schemaname = 'dbo'
--if no header provided, default to Y
IF ISNULL(@header, '') = ''
SELECT @header = 'Y'
SELECT @schemaid = (SELECT schema_id FROM sys.schemas WHERE [name] = @schemaname)
SELECT
@cols = (
SELECT ' , CAST([', b.name + '] AS VARCHAR(50)) '
FROM sys.objects a
INNER JOIN sys.columns b ON a.object_id=b.object_id
WHERE a.name = @tablename AND a.schema_id = @schemaid
FOR XML PATH('')
),
@heading = (
SELECT ',"' + b.name + '"' FROM sys.objects a
INNER JOIN sys.columns b ON a.object_id=b.object_id
WHERE a.name= @tablename AND a.schema_id = @schemaid
FOR XML PATH('')
)
SET @tablename = @schemaname + '.' + @tablename
SET @heading = 'SELECT ''' + right(@heading,len(@heading)-1) + ''' AS CSV, 0 AS Sort' + CHAR(13)
SET @cols = '''"'',' + replace(right(@cols,len(@cols)-1),',', ',''","'',') + ',''"''' + CHAR(13)
IF @header = 'Y'
SET @sqlstrs = 'SELECT CSV FROM (' + CHAR(13) + @heading + ' UNION SELECT CONCAT(' + @cols + ') CSV, 1 AS Sort FROM ' + @tablename + CHAR(13) + ') X ORDER BY Sort, CSV ASC'
ELSE
SET @sqlstrs = 'SELECT CONCAT(' + @cols + ') CSV FROM ' + @tablename
IF @schemaid IS NOT NULL
EXEC(@sqlstrs)
ELSE
PRINT('SCHEMA DOES NOT EXIST')
END
END
GO
--------------------------------------
--EXEC get_csvFormat @schemaname='dbo', @tablename='TradeUnion', @header='Y'
언급URL : https://stackoverflow.com/questions/14212641/export-table-from-database-to-csv-file
'programing' 카테고리의 다른 글
VueX 및 Laravel Passport를 사용한 인증 (0) | 2023.07.11 |
---|---|
where 절에서 이상한 임의 동작 (0) | 2023.07.11 |
다시 클릭할 때까지 요소 UI 날짜 선택기 구성 요소가 값을 업데이트하지 않는 이유는 무엇입니까? (0) | 2023.07.11 |
아님:첫 번째 자식 선택기 (0) | 2023.07.11 |
봄 @Bean(이름 ="이름") vs @Bean @Qualifier("이름") (0) | 2023.07.11 |