Usuário com melhor resposta
Por que o SQLSERVER Express não reconhece palavras acentuadas ao criar banco utilizando o sqlcmd?

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 embanco 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 emtabela_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 dosqlcmd
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.
Respostas
-
Deleted
- Marcado como Resposta Junior Galvão - MVPMVP, Moderator domingo, 15 de setembro de 2019 12:26
-
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]
- Marcado como Resposta Junior Galvão - MVPMVP, Moderator domingo, 15 de setembro de 2019 12:27
Todas as Respostas
-
-
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 ?
-
-
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
- Editado Wallace Full Stack quinta-feira, 25 de julho de 2019 13:59
-
Deleted
- Marcado como Resposta Junior Galvão - MVPMVP, Moderator domingo, 15 de setembro de 2019 12:26
-
-
-
-
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]
- Marcado como Resposta Junior Galvão - MVPMVP, Moderator domingo, 15 de setembro de 2019 12:27