Export Dati da una Tabella di MS SQL Server in un file CSV usando BCP utility e Stored Procedures

Approfondimento del post relativo all’esportazione  in blocco di dati da un database MS SQL Server in un file di  CSV [link].

OBIETTIVO:

Selezionare solo alcune colonne delle tabelle, creare una chiave stringa ad-hoc ed esportare in blocco in modalità Bulk-Copy (bcp.exe).

PROBLEMA:

Registrare una Store Procedure con query interna del tipo [SELECT… JOIN…ON], esecuzione della BCP utility da shell di comando attraverso l’estensione xp_cmdshell.  La procedura lanciata per ca. 42 milioni di righe con una query composta va in eccezione System.OutOfMemoryException nonostante il sistema sia x64 con 12GB di ram.

SOLUZIONE:

Creazione di Store Procedure su MS SQL Server ed esecuzione di BCP utility da Terminale Windows (cmd.exe).

ESEMPIO:

Store Procedure + BCP interno [link]

USE MYDB
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROC exportDataToCSV

AS

SET NOCOUNT ON

SELECT

Tab1_data1, Tab2_data2 + ‘TEST’ + CAST(Data_ID AS VARCHAR(100)) AD Test_ID,

Tab_Date  AS Test_Date,

Tab_Level as Test_Value,

FROM

TAB1 AS T1

JOIN

TAB2 AS T2

ON

T1.Data_ID = T2.Level_DataID

/*Set BCP utility string */

DECLARE @SQL VARCHAR(8000)
SELECT @SQL = ‘BCP “EXEC MYDB.dbo.exportDataToCSV” queryout c:\DATA.csv -c -t , -U loginid -P password -S nome_server\nome_istanza’

/*Esecuzione Comando*/

EXEC master..xp_cmdshell @SQL

Store Procedure + BCP esterno

Si registra la procedura exportDataToCSV, quindi si apre il terminale e si esegue:

BCP “EXEC MYDB.dbo.exportDataToCSV” queryout c:\DATA.csv -c -t , -U loginid -P password -S nome_server\nome_istanza

Per fare funziona la BCP utility internamente occorre attivare la funzione xp_cmdshell [link].

Un Commento

  1. Pingback: Utilizzare MONGOIMPORT utility per importare velocemente dati da un file CSV in un database MongoDB | Primi Appunti

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...