Program Tip

데이터베이스에서 csv 파일로 테이블 내보내기

programtip 2020. 11. 10. 22:07
반응형

데이터베이스에서 csv 파일로 테이블 내보내기


원하는 작업 : csvSQL Server 가져 오기 내보내기 마법사를 사용하지 않고 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

자세한 정보 : ExcelSQLServer

메모:

  • 이 접근 방식은 파일 맨 아래에 "영향을받은 행"정보가 있지만 쿼리 자체에서 "SET NOCOUNT ON"을 사용하여 제거 할 수 있습니다.

  • 실제 쿼리 대신 저장 프로 시저를 실행할 수 있습니다 (예 : "EXEC Database.dbo.StoredProcedure").

  • 모든 프로그래밍 언어 또는 배치 파일을 사용하여이를 자동화 할 수 있습니다.

BCP (명령 프롬프트) 사용

예:

bcp "SELECT * FROM Database.dbo.Table" queryout C:\Test.csv -c -t',' -T -S .\SQLEXPRESS

쉼표 구분 기호를 -t ','대 -t로 인용하는 것이 중요합니다.

자세한 정보 : bcp 유틸리티

메모:

  • SQLCMD를 사용할 때 실제 쿼리 대신 저장 프로 시저를 실행할 수 있습니다.
  • 모든 프로그래밍 언어 또는 배치 파일을 사용하여이를 자동화 할 수 있습니다.

도움이 되었기를 바랍니다.


다음은 옵션입니다 내가 찾은 Excel로 수출에 CSV (I 수정할 수 있습니다 믿습니다)

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);
   });

SQL Server Management Studio에서

내보낼 테이블을 마우스 오른쪽 단추로 클릭하고 "모든 행 선택"을 선택하십시오.

결과 창을 마우스 오른쪽 버튼으로 클릭하고 "다른 이름으로 결과 저장 ..."을 선택합니다.


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;

나는 그것을하는 작은 도구를 썼다. 코드는 github에서 사용할 수 있습니다 .

하나 이상의 SQL 쿼리 결과를 하나 이상의 CSV 파일로 덤프하려면 다음을 수행하십시오.

java -jar sql_dumper.jar /path/sql/files/ /path/out/ user pass jdbcString

건배.


아마도 죽은 말일지도 모르지만 얼마 전에 나는 똑같이하려고 노력하고 내가 찾고있는 것을 시도하는 STP를 만드는 스크립트를 발견했지만 약간의주의가 필요한 몇 가지 단점이있었습니다. 업데이트를 게시 할 스크립트를 찾은 위치를 추적하려는 시도에서이 스레드를 발견했고 공유하기에 좋은 지점 인 것 같았습니다.

이 STP (대부분 내가 신뢰하지 않고 내가 찾은 사이트를 찾을 수 없음)는 스키마 이름, 테이블 이름 및 Y 또는 N [헤더 포함 또는 제외]을 입력 매개 변수로 사용합니다. 제공된 테이블을 쿼리하여 각 행을 쉼표로 구분, 인용, csv 형식으로 출력합니다.

I've made numerous fixes/changes to the original script, but the bones of it are from the OP, whoever that was.

Here is the script:

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'

In SQL Server Management Studio query window

  1. Select All result set values
  2. Right Click and Select "Save Results As"

Table Content to CSV

  1. Save as CSV file

참고URL : https://stackoverflow.com/questions/14212641/export-table-from-database-to-csv-file

반응형