none
Gerar base em txt RRS feed

  • Pergunta

  • Srs,

     

    Gostaria de saber se alguem sabe como gerar uma base de dados de 1500000 em txt ou melhor em csv...estou usando o sql server express edition 2005...fico no aguardo!

    quinta-feira, 8 de março de 2007 15:27

Respostas

  • Se a idéia é TXT (seja na origem ou no destino) então BCP é a melhor 
    alternativa. Ela não chega a ser uma ferramenta de ETL já que o BCP não
    permite transformações de dados (só é possível exportar ou importar na
    íntegra sem alterações), mas possui uma velocidade impressionante.

    Segue uma sugestão de como gerar o seu banco em TXT (retirada do SQL
    Server Central)

    - Rode o script abaixo para criar a procedure
    - Para exportar basta executar a procedure

    exec dbsp_bcp_out @tbl='SuaTabela', @db = 'SeuBanco', @path = 'O
    diretório para gerar um txt para cada tabela'

    Agora basta montar a execução da procedure com cada tabela. Se forem
    muitas você pode gerar um script. Ex:

    SELECT 'exec dbsp_bcp_out @tbl=' + '''' + Name + '''' + ', @db = ' +
    '''' + DB_NAME() + '''' + ', @path = ' + '''' + 'C:\TXTS\' + ''''
    FROM SYSOBJECTS WHERE TYPE = 'U' ORDER BY NAME

    CREATE procedure dbsp_bcp_out
    @tbl varchar( 40) = NULL,
    @db varchar( 30) = NULL,
    @path varchar( 200) = 'c:\'
    as
    /*
    *************************************************************
    Name: dbsp_bcp_out
    Description:
    BCPs out an entire table to a local file on the server. The
    user passes in the name of a table or view, the database in which
    this is located and (optionally) the path to write the text file
    to. The file is written out as: <table>.txt

    Usage: exec dbsp_bcp_out <tbl>, <db>, <path>
    exec dbsp_bcp_out 'producttype', 'iqd_dev', 'c:\mssql'

    Author: Steve Jones (7-26-1999)
    Copyright: 1999 dkRanch.net

    Input Params:
    -------------
    @tbl Name of a table or view to bcp out of the server
    @db Name of the database in which the table is located.
    @path path in which to write output file.

    Output Params:
    --------------

    Return: 0 if no error.

    Results:
    ---------

    Calls: master..xp_cmdshell

    Locals:
    --------
    @err Holds error value
    @cmd Holds BCP command

    Modifications:
    --------------

    *************************************************************
    */
    set nocount on
    declare @err int,
    @cmd varchar( 250)

    select @err = 0
    /*
    Check parameters and exit if not correct.
    */
    if @tbl Is NULL
    select @err = -1
    if @db Is NULL
    select @err = -1
    if @err = -1
    begin
    Raiserror( 'Parameter Error:Usage:exec dbsp_bcp_out <tbl>, <path>', 12, 1)
    return @err
    end
    if ( select count(*) from sysobjects where name = @tbl) = 0
    begin
    Raiserror( 'Table does not exist;Please pass in the name of an
    existing table.', 12, 1)
    return -1
    end
    if ( select count(*) from master..sysdatabases where name = @db) = 0
    begin
    Raiserror( 'Database does not exist;Please pass in the name of an
    existing database.', 12, 1)
    return -1
    end


    /* Ensure there is a backslash on the path */
    if right( rtrim( @path), 1) != '\'
    select @path = rtrim( @path) + '\'


    /*
    Build the BCP command string
    */
    select @cmd = 'bcp ' + rtrim( @db) + '..' + rtrim( @tbl) + ' out ' +
    rtrim( @path) + rtrim( @tbl) + '.txt -n -S' + @@servername + ' -U sa -T
    -E'
    select @cmd = 'master..xp_cmdshell ''' + rtrim( @cmd) + ''''

    /*
    Run the BCP command to move the data out.
    */
    exec( @cmd)
    select @cmd
    return @err
    GO
    if object_id( 'dbsp_bcp_out') Is Null
    select 'dbsp_bcp_out Not Created'
    else
    select 'dbsp_bcp_out Created'
    go
    sábado, 28 de junho de 2008 16:46

Todas as Respostas

  • Voce pode utilizar o bcp para fazer isso.

     

      Att,

    terça-feira, 20 de março de 2007 12:49
  • Mário,

    Realmente o BCP é uma ótima alternativa.

    Mas o que você pode fazer também é dentro do Management Studio, fazer o seu select retornando os dados desejados e depois pedir para salvar em arquivo, clicando no botão SAVE As.

     

    terça-feira, 20 de março de 2007 13:12
    Moderador
  • Olá pessoal... olhei este poste e a dúvida minha é quase a mesma...

    mas só pra me ajudar a entender oq vcs estão discutindo....

    Oq é BCP?

    ...

     

    Até logo e Obrigado pelos esclarecimentos...

    sexta-feira, 27 de junho de 2008 13:57
  • Toddy,

     

    O BCP é um ferramenta de linha de comando existente no SQL Server, com o objetivo de facilitar o processo de carga, transformação e extração de dados(ETL), permitindo que diversas fontes e formas de dados diferentes possam ser importados ou exportados do SQL Server ou para o SQL Server.

     

    A sua forma de uso é muito simples, você poderá obter mais informações e detalhes sobre o BCP acessando o Books On-Line do SQL Server.

     

    Basicamente é isso.

    sexta-feira, 27 de junho de 2008 16:05
    Moderador
  • Se a idéia é TXT (seja na origem ou no destino) então BCP é a melhor 
    alternativa. Ela não chega a ser uma ferramenta de ETL já que o BCP não
    permite transformações de dados (só é possível exportar ou importar na
    íntegra sem alterações), mas possui uma velocidade impressionante.

    Segue uma sugestão de como gerar o seu banco em TXT (retirada do SQL
    Server Central)

    - Rode o script abaixo para criar a procedure
    - Para exportar basta executar a procedure

    exec dbsp_bcp_out @tbl='SuaTabela', @db = 'SeuBanco', @path = 'O
    diretório para gerar um txt para cada tabela'

    Agora basta montar a execução da procedure com cada tabela. Se forem
    muitas você pode gerar um script. Ex:

    SELECT 'exec dbsp_bcp_out @tbl=' + '''' + Name + '''' + ', @db = ' +
    '''' + DB_NAME() + '''' + ', @path = ' + '''' + 'C:\TXTS\' + ''''
    FROM SYSOBJECTS WHERE TYPE = 'U' ORDER BY NAME

    CREATE procedure dbsp_bcp_out
    @tbl varchar( 40) = NULL,
    @db varchar( 30) = NULL,
    @path varchar( 200) = 'c:\'
    as
    /*
    *************************************************************
    Name: dbsp_bcp_out
    Description:
    BCPs out an entire table to a local file on the server. The
    user passes in the name of a table or view, the database in which
    this is located and (optionally) the path to write the text file
    to. The file is written out as: <table>.txt

    Usage: exec dbsp_bcp_out <tbl>, <db>, <path>
    exec dbsp_bcp_out 'producttype', 'iqd_dev', 'c:\mssql'

    Author: Steve Jones (7-26-1999)
    Copyright: 1999 dkRanch.net

    Input Params:
    -------------
    @tbl Name of a table or view to bcp out of the server
    @db Name of the database in which the table is located.
    @path path in which to write output file.

    Output Params:
    --------------

    Return: 0 if no error.

    Results:
    ---------

    Calls: master..xp_cmdshell

    Locals:
    --------
    @err Holds error value
    @cmd Holds BCP command

    Modifications:
    --------------

    *************************************************************
    */
    set nocount on
    declare @err int,
    @cmd varchar( 250)

    select @err = 0
    /*
    Check parameters and exit if not correct.
    */
    if @tbl Is NULL
    select @err = -1
    if @db Is NULL
    select @err = -1
    if @err = -1
    begin
    Raiserror( 'Parameter Error:Usage:exec dbsp_bcp_out <tbl>, <path>', 12, 1)
    return @err
    end
    if ( select count(*) from sysobjects where name = @tbl) = 0
    begin
    Raiserror( 'Table does not exist;Please pass in the name of an
    existing table.', 12, 1)
    return -1
    end
    if ( select count(*) from master..sysdatabases where name = @db) = 0
    begin
    Raiserror( 'Database does not exist;Please pass in the name of an
    existing database.', 12, 1)
    return -1
    end


    /* Ensure there is a backslash on the path */
    if right( rtrim( @path), 1) != '\'
    select @path = rtrim( @path) + '\'


    /*
    Build the BCP command string
    */
    select @cmd = 'bcp ' + rtrim( @db) + '..' + rtrim( @tbl) + ' out ' +
    rtrim( @path) + rtrim( @tbl) + '.txt -n -S' + @@servername + ' -U sa -T
    -E'
    select @cmd = 'master..xp_cmdshell ''' + rtrim( @cmd) + ''''

    /*
    Run the BCP command to move the data out.
    */
    exec( @cmd)
    select @cmd
    return @err
    GO
    if object_id( 'dbsp_bcp_out') Is Null
    select 'dbsp_bcp_out Not Created'
    else
    select 'dbsp_bcp_out Created'
    go
    sábado, 28 de junho de 2008 16:46