AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 120661
Accepted
JohnG
JohnG
Asked: 2015-11-11 12:36:10 +0800 CST2015-11-11 12:36:10 +0800 CST 2015-11-11 12:36:10 +0800 CST

No SQL Server, existem outras opções de importação e exportação de dados

  • 772

Trabalho com SQL Server desde o SQL Server 7. Portanto, conheço BCP, Bulk insert, openrowset e SSIS.

Minha dúvida é simples:

  • Você conhece outras maneiras de importar/exportar dados usando as versões do SQL Server Express SQL 2005 a 2014 (e em breve 2016).

Quero ter a certeza que não há mais nada pelo facto de a utilização do BCP (que é o que estou a utilizar neste momento) requer a utilização de xp_cmdshelle por questões de segurança, requer uma xp_cmdshell_proxyconta. Estou sendo desafiado no trabalho e quero ter certeza de que não existe mais nada ou que seja novo no Microsoft SQL Server (Express) antes de responder.

sql-server import
  • 1 1 respostas
  • 662 Views

1 respostas

  • Voted
  1. Best Answer
    Solomon Rutzky
    2015-11-11T12:44:23+08:002015-11-11T12:44:23+08:00

    O SQLCMD pode ser usado para exportar dados. A saída padrão às vezes é complicada para isso, mas você pode usar algumas opções de linha de comando para desativar os cabeçalhos, cortar os espaços à direita e usar uma vírgula em vez do espaço padrão:

    sqlcmd -Q "SET NOCOUNT ON; SELECT TOP(10) name, object_id, type FROM sys.objects;" ^
      -h-1 -W -s ","
    

    Retorna:

    sysrscols,3,S
    sysrowsets,5,S
    sysclones,6,S
    sysallocunits,7,S
    sysfiles1,8,S
    sysseobjvalues,9,S
    syspriorities,17,S
    sysdbfrag,18,S
    sysfgfrag,19,S
    sysdbfiles,20,S
    

    Use a -oopção de enviar a saída para um arquivo:

    sqlcmd -Q "SET NOCOUNT ON; SELECT TOP(10) name, object_id, type FROM sys.objects;" ^
      -h-1 -W -s "," -o C:\temp\SysObjects.txt
    

    Um programa .NET personalizado (aplicativo de console, aplicativo do Windows ou até mesmo aplicativo da Web) pode ser criado para importar e/ou exportar. Para importar, como os parâmetros com valor de tabela (TVPs) não são uma opção aqui, às vezes é mais rápido transformar/serializar os dados em XML e, em seguida, executar um procedimento armazenado que aceitará o parâmetro XML e, usando a .nodes()função, desserializá-lo de volta em linhas que podem ser inseridas por meio da INSERT INTO table (fields) SELECT x.value(),... FROM @XmlParam.nodes();construção. Obviamente, você não gostaria de fazer 1 milhão de linhas dessa maneira, portanto, dividiria o arquivo de importação em lotes de X linhas e enviaria de 100 a 500 por vez. Se houver muitos dados, talvez as INSERTinstruções diretas sejam melhores, mas, nesse caso, você deseja agrupar cada lote de X linhas em uma transação explícita usando SqlTransaction .


    Dependendo de quão confortável você (ou alguém com quem você trabalha) está com a programação .NET, você pode usar o SQLCLR para criar sua própria funcionalidade personalizada de importação e/ou exportação. Isso funcionaria em todas as edições do SQL Server em todas as versões a partir do SQL Server 2005.

    Nesse sentido, existe uma biblioteca comercialmente disponível de funções e procedimentos SQLCLR chamada SQL# (da qual sou o criador). Algumas das funções e procedimentos armazenados lidam com a importação e exportação de dados. O procedimento armazenado File_SplitIntoFields retorna um conjunto de resultados onde cada linha é uma linha do arquivo de entrada, mas cada campo no arquivo é uma coluna separada. Por padrão, o tipo de dados para cada campo é NVARCHAR(MAX), mas há um parâmetro de entrada opcional para especificar qual deve ser o tipo de dados exato de cada coluna. Isso torna bastante fácil de fazer:

    INSERT INTO dbo.MyImportTable (Col1, Col2, Col3, Col4)
      EXEC SQL#.File_SplitIntoFields
        @FilePath = N'',
        @RegExDelimiter = N',',
        @DataTypes = N'NVARCHAR(100),INT,DATETIME,BIT';
    

    E há um procedimento armazenado equivalente chamado INET_SplitIntoFields que faz a mesma coisa, mas em vez de obter os dados de um arquivo, ele os transmite diretamente de uma URL (portanto, não é necessário baixar o arquivo localmente primeiro).

    Para exportar, existe um procedimento armazenado chamado DB_BulkExport que combina muitos dos recursos do SQLCMD e do SSIS. Eu criei isso depois de precisar fazer várias exportações e não conseguir decidir entre SQLCMD e SSIS, pois cada um tem seus prós e contras, e cada um tem um ou dois recursos que o outro não possui, mas todos esses recursos foram precisava. Por exemplo, DB_BulkExport não precisa de nenhuma especificação de campo de saída codificada e pode manipularSELECT *consultas (algo que não consegui descobrir como gerenciar no SSIS, mas foi fácil com o SQLCMD). Ele também pode lidar com a qualificação de texto dos campos sem ter que atualizar a consulta de origem para concatenar as aspas duplas (o que torna a consulta muito feia e difícil de manter). Na verdade, ele pode ser definido para qualificar TODOS os campos de texto ou apenas os campos que precisam dele com base em seu tipo de dados (strings, datas, GUIDs etc.).

    • 4

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve