none
Problema com BULK INSERT RRS feed

  • Pergunta

  • E aê pessoal, beleza?

    Estou fazendo uma inserção no meu banco de dados uma relação de nomes de lojas e telefone, o código funciona perfeitamente, só que ao consultar os dados percebi que nomes com carecteres como "ç" e "~" ficam com um caractere desconhecido. Tentei colocar como tipo nvarchar mas o problema persiste. Alguém sabe me dizer se isso é normal?

    segunda-feira, 26 de setembro de 2011 22:44

Respostas

  • Boa tarde WMN8!

    Na inserção das strings, se possível, tente colocar N'<string>', dessa forma o SQL entede que os dados inseridos são Unicode.

    Abraço!

    • Marcado como Resposta LWMN terça-feira, 27 de setembro de 2011 22:28
    terça-feira, 27 de setembro de 2011 16:37
  • Só tome cuidado com uma coisa, em relação aos tipos nchar e nvarchar: eles ocupam o dobro do tamanho de char e varchar. Isso pode ser indesejado.

    Verifique o Collate que está sendo utilizado. Se puder trocar, provavelmente resolverá. E poderá continuar usando varchar.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta LWMN terça-feira, 27 de setembro de 2011 22:29
    terça-feira, 27 de setembro de 2011 21:07

Todas as Respostas

  • Boa tarde WMN8!

    Na inserção das strings, se possível, tente colocar N'<string>', dessa forma o SQL entede que os dados inseridos são Unicode.

    Abraço!

    • Marcado como Resposta LWMN terça-feira, 27 de setembro de 2011 22:28
    terça-feira, 27 de setembro de 2011 16:37
  • Só tome cuidado com uma coisa, em relação aos tipos nchar e nvarchar: eles ocupam o dobro do tamanho de char e varchar. Isso pode ser indesejado.

    Verifique o Collate que está sendo utilizado. Se puder trocar, provavelmente resolverá. E poderá continuar usando varchar.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta LWMN terça-feira, 27 de setembro de 2011 22:29
    terça-feira, 27 de setembro de 2011 21:07
  • Obrigado pela ajuda Vitor!
    terça-feira, 27 de setembro de 2011 22:28
  • Esse é o motivo de ter criado varchar, só que os dados com "ç" e "~" sempre dava problema.

    Obrigado pela dica Roberson!

    terça-feira, 27 de setembro de 2011 22:29
  • Pessoal, o meu problema persiste, o código que estou usando é o seguinte!

    USE tempdb;
    GO

    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    IF OBJECT_ID('dbo.TABELA', 'U') IS NOT NULL
        DROP TABLE dbo.TABELA
    GO

    CREATE TABLE dbo.TABELA
    (
        INSC nchar(9) NULL,
        NOME nvarchar(100) NULL
    )
    GO

    BULK INSERT dbo.Tabela FROM 'Z:\LISTA.TXT'
    WITH
    (
        FIELDTERMINATOR='\t',
        ROWTERMINATOR='\n'
    )

    SELECT INSC, NOME FROM dbo.TABELA;

    Os dados do arquivo estão assim:

    0046-7    ABDON
    0141-5    ABINAIR
    0163-8    ABRAÃO
    0122-3    GONÇALVES

    Na consulta não sai conforme está no arquivo, os acentos e ç saem com um caractere estranho.

    Agradeço desde já!

    sábado, 1 de outubro de 2011 01:52
  • Chegou a mudar o collate da coluna nome? Coloque nela o CP850_CI_AI.
    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    sábado, 1 de outubro de 2011 02:03
  • Boa noite Roberson, o código seria assim?

    CREATE TABLE dbo.TABELA
    (
      INSC nchar(9) NULL,
      NOME nvarchar(100) collate SQL_Latin1_General_CP850_CI_AI NULL
    )
    GO

    segunda-feira, 3 de outubro de 2011 02:40
  • Isso mesmo. E aí você pode deixar a coluna como VarChar(100), em vez de NVarChar(100).

    Agora, se você já mudou o collate da base de dados, não precisa explicitar o collate na criação da tabela/coluna, pois as novas tabelas/colunas herdarão o collate da base.

    Dê uma olhada no seguinte artigo: http://robersonferreira.com.br/alterandocollate/


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    segunda-feira, 3 de outubro de 2011 21:49
  • Ainda continua o problema, o que mais pode ser?
    terça-feira, 4 de outubro de 2011 23:01
  • O que exatamente você fez? Alterou o collate da coluna ou do banco?
    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 5 de outubro de 2011 15:56