BCP je utilita, která je defaultně nainstalována s edicemi SQL Server a slouží k hromadnému importu nebo exportu velkého objemu dat v uživatelsky definovaném formátu. Tato utilita je optimalizována pro velké přesuny dat buďto mezi instancemi SQL serveru nebo mezi SQL instancí a nějakým textovým souborem. Utilita se používá jak pro jednorázový import/export dat, tak pro pravidelné data loady v rámci ETL procesů. Utilita se pouští přes příkazový řádek (cmd) a má svoji syntaxi.
Syntaxe BCP
Parametry utility si můžeme zobrazit jednoduše. Spustíme příkazovou řádku a napíšeme “bcp”. Výsledkem je seznam parametrů, které můžeme aplikovat. Mezi nejdůležitější argumenty bcp patří:
- -S … název serveru (kam se připojujeme)
- -U … uživatelské jméno (pod jakým loginem se připojujeme)
- -P … heslo (heslo k loginu)
- -d … databáze (databáze kam se připojujeme)
- -n … nativní databázový formát dat
Syntaxe exportu dat: Export dat z tabulky do souboru
- [database_name.] schema.table_name | view_name | out data_file | format nul} – v případě, že exportujeme celou tabulku
- dotaz | queryout data_file | format nul} – v případě, že exportujeme na základě dotazu
Syntaxe importu dat: Import dat do tabulky ze souboru
- [database_name].schema.table_name | view_name | in data_file | format nul}
Příklad exportu/importu SQL dat pomocí BCP – bulk copy program
Na příkladu ukážeme, jak exportovat data z tabulky.
1) Příprava tabulky – nachystáme si jednoduchou tabulku o 2 sloupcích a naplníme ji daty. První sloupec je primární klíč a druhý sloupec je 4x zreplikovaný GUID. Druhý sloupec má tedy na každém řádku textový řetězec 148 znaků. Celkem generujeme 100 000 záznamů.
CREATE TABLE Temp.dbo.Test (ID INT IDENTITY(1,1) PRIMARY KEY,
Textove_pole VARCHAR(255)
)
DECLARE @Kursor INT=1
DECLARE @GUID UNIQUEIDENTIFIER
START_CYCLE:
SET @GUID= NEWID()
INSERT INTO Temp.dbo.Test (Textove_pole)
SELECT REPLICATE(CONCAT(CONVERT(VARCHAR(255),@GUID),‘-‘),4)
SET @Kursor=@Kursor+1
IF @Kursor <= 100000 GOTO START_CYCLE
2) Cílový adresář pro export dat bude: C:\Cilovy_folder_bcp
3) BCP příkaz: bude vypadat takto [Temp].[dbo].[Test] out “C:\Cilovy_folder_bcp\Temp_dbo_Test_2018_07_02.bcp” -SSQL_INSTANCE -T -n
4) Výsledek: Hotovo. Alternativně provádíme import
Více informací v dokumentaci Microsoftu k bulk copy program utilitě zde