none
Por que o SQLSERVER Express não reconhece palavras acentuadas ao criar banco utilizando o sqlcmd? RRS feed

  • Pergunta

  • Problema

    Em alguns bancos(SQLSERVER) eu estou precisando frequentemente popular as tabelas com alguns dados, que normalmente vem de um arquivo .txt ou .xlsx, preciso fazer isso da forma mais rápido possível.

    A primeira coisa que pensei em fazer que iria me ajudar, foi copiar os dados desses arquivos para o excel, salva-los como .csv e importar no banco indo em banco de dados -> tarefas -> importar arquivo simples, porém desta forma as letras quem vem com acento não são reconhecidas pelo SQLSERVER e são substituídas por ?.

    A segunda coisa que pensei em fazer foi: copiar os dados dos arquivos .txt ou .xlsx, ir em tabela_do_banco -> Editar 200 linhas superiores e colar lá. Desta forma as letras que contem acento são reconhecidas e exibidas sem serem substituídas.

    Entretanto, o problema em fazer desta segunda forma é o seguinte: depois de tudo pronto eu preciso criar o banco utilizando o comando sqlcmd -E -S .\sqlexpress -i "%CD%\script.sql" e quando eu faço isso os dados que anteriormente foram populados sem nenhum carácter ser substituído são substituídos :(.

    Dúvidas

    • Por que o SQLSERVER Express não reconhece palavras acentuadas ao criar banco utilizando o sqlcmd ?
    • O que eu poderia fazer para que o SQLSERVER Express reconheça os carácteres que contém acentos(á, à, ã, â, ç) ao criar o banco utilizando o sqlcmd ?

    OBS:

    Já até instalei a versão mais recente do Sql Server 2019 e criei o banco com a collate Latin1_General_100_CI_AI_SC_UTF8 e acontece a mesma coisa: se eu gero o script de criação do banco e executo ele pelo próprio SSMS o banco é criado normalmente sem substituir os carácteres, porém se eu uso o comando do sqlcmd para executar o arquivo de script que contém a criação do banco; ele cria o banco com a collate que eu defini mas substitui os carácteres que tem acento por outros estranho.

    quinta-feira, 25 de julho de 2019 12:25

Respostas

  • Deleted
    quinta-feira, 25 de julho de 2019 14:19
  • Mesmo que eu consiga importar os dados utilizando o assistente de importação, se eu utilizar o sqlcmd para executar o script do banco de dados, o caracteres que contém acento não iriam continuar tendo o mesmo problema ?

    Wallace,

    Então, teoricamente sim, desde que na hora de realizar a exportação dos dados via SQLCMD informe o CodePage ou no próprio Select que será processado você venha a informar o Collate correto.



    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 25 de julho de 2019 16:37
    Moderador

Todas as Respostas

  • Deleted
    quinta-feira, 25 de julho de 2019 12:58
  • O script que estou executando pelo sqlcmd é este:

    USE [master]
    GO
    /****** Object:  Database [testeutf8]    Script Date: 25/07/2019 08:49:13 ******/
    CREATE DATABASE [testeutf8]
     COLLATE Latin1_General_100_CI_AI_SC_UTF8
    GO
    
    use [testeutf8]
    go
    
    CREATE TABLE [dbo].[Nomeç](
    	[Nomeç] [varchar](50) COLLATE Latin1_General_100_CI_AI_SC_UTF8 NOT NULL
    ) ON [PRIMARY]
    GO
    INSERT [dbo].[Nomeç] ([Nomeç]) VALUES (N'á à ã â ç ! @ # $ % & * ä')
    GO
    USE [master]
    GO
    ALTER DATABASE [testeutf8] SET  READ_WRITE 
    GO

    O codpage a que se refere é o do script sql ? Se for eu não sei em qual codpage ele está sendo gerado, eu apenas mando gerar o script e defino para gerar esquema e dados. Onde eu poderia olhar o codpage ?

    quinta-feira, 25 de julho de 2019 13:15
  • Deleted
    quinta-feira, 25 de julho de 2019 13:42
  •  há como você fazer os testes na instância não 2019?

    Sim, antes de usar a 2019 estava usando a 2017.

    Vamos forcar no porque do sqlcmd fazer a conversão do texto.

    O texto de teste que estou usando é este: á à ã â ç ! @ # $ % & * ä

    Quando rodo o script pelo sqlcmd o texto é cadastrado assim: Ã¡ à ã â ç ! @ # $ % & * ä

    Mesmo utilizando o script que enviei anteriormente, o qual utiliza a COLLATE Latin1_General_100_CI_AI_SC_UTF8 

    O resultado da consulta que você fez, me retorna isso:

    Latin1_General_CI_AS | Latin1_General_100_CI_AI_SC_UTF8 |  Latin1_General_100_CI_AI_SC_UTF8


    quinta-feira, 25 de julho de 2019 13:56
  • Deleted
    quinta-feira, 25 de julho de 2019 14:19
  • Experimentei desta forma, porém deu mesma coisa.

    Triste é a minha situação :(

    quinta-feira, 25 de julho de 2019 14:31
  • Deleted
    quinta-feira, 25 de julho de 2019 14:56
  • Mesmo que eu consiga importar os dados utilizando o assistente de importação, se eu utilizar o sqlcmd para executar o script do banco de dados, o caracteres que contém acento não iriam continuar tendo o mesmo problema ?
    quinta-feira, 25 de julho de 2019 15:14
  • Mesmo que eu consiga importar os dados utilizando o assistente de importação, se eu utilizar o sqlcmd para executar o script do banco de dados, o caracteres que contém acento não iriam continuar tendo o mesmo problema ?

    Wallace,

    Então, teoricamente sim, desde que na hora de realizar a exportação dos dados via SQLCMD informe o CodePage ou no próprio Select que será processado você venha a informar o Collate correto.



    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 25 de julho de 2019 16:37
    Moderador