Solução para o problema de importação do SQL Server
Pré-condição
Para mover os dados de um SQL Server para outro (por exemplo, do ambiente de produção para o ambiente de teste) faz sentido usar o recurso "Gerar scripts" que está disponível nas opções de banco de dados no SQL Server Management Studio. O resultado desta operação é um arquivo texto com comandos SQL que podem ser executados em outro SQL Server. Normalmente, esses arquivos são muito grandes para executá-los no SQL Server Management Studio, portanto, precisamos usar o sqlcmd utilitário de linha de comando do pacote de instalação do SQL Server. Na maioria dos casos, o utilitário funciona sem problemas e não são necessárias ações adicionais do usuário.
Descrição do problema
Em alguns casos raros, o sqlcmd utilitário pode falhar com a importação e gerar o seguinte erro:"Aspas não fechadas após a cadeia de caracteres ..." que indica que uma das consultas SQL não foi executada. Isso acontece porque sqlcmd funciona usando processamento de fluxo, ou seja, ele lê alguns dados, processa-os, lê a próxima parte e assim por diante. Em alguns casos, um arquivo de entrada pode conter uma instrução SQL enorme cujo tamanho é maior que a quantidade de dados que podem ser processados pelo sqlcmd de cada vez, então sqlcmd tenta executar SQL quebrado e falha.
Soluções possíveis
Para corrigir esse problema, duas abordagens podem ser usadas:
-
O sqlcmd O utilitário pode aceitar o parâmetro "-a" que define o tamanho máximo do pacote (parte de dados) que será usado durante o processamento. O valor máximo é 32767, o valor padrão é 4096, então faz sentido usar sempre este parâmetro com valor máximo.
sqlcmd -i input.sql -a 32767 -o import_log.txt
-
Se a primeira abordagem não ajudar e o problema ainda aparecer, há outra solução mais difícil:
- Instale o Cygwin
- Durante a instalação, após algumas telas padrão, pare na tela "Selecionar pacotes"
- No campo "Pesquisar", digite "sed" e na árvore abaixo expanda a categoria "Base" e escolha a versão não inferior a 4.2.2 para instalação
- Instalação completa
- Observação:"sed" é o utilitário do Linux que permite o processamento de arquivos baseado em fluxo
- Após a conclusão da instalação, execute "Cygwin64 Terminal" na área de trabalho. Vamos usá-lo para as próximas etapas
-
Vá para o diretório onde está localizado o arquivo SQL gerado pelo SQL Server Management Studio. Você precisa usar barras no estilo Linux "/" em vez do estilo Windows, que é "\"
cd d:/temp
-
Altere a codificação do arquivo SQL de UTF-16LE para UTF-8, pois "sed" não pode processar UTF-16LE, essa conversão é segura para os dados. O resultado será um novo arquivo, que usaremos na próxima etapa
iconv -f UTF-16LE -t UTF-8 input.sql > input_utf8.sql
-
Converta o novo arquivo para ter uma consulta SQL em um lote. O resultado será um novo arquivo, que usaremos na próxima etapa
sed -e 's/^INSERT/GO\nINSERT/' input_utf8.sql > input_utf8_adapted.sql
-
Agora o arquivo "input_utf8_adapted.sql" deve ser processado pelo sqlcmd sem problemas, então podemos executar o seguinte:
sqlcmd -i input_utf8_adapted.sql -a 32767 -o import_log.txt
-
Após a execução, verifique import_log.txt para certificar-se de que nenhum erro apareceu
- Instale o Cygwin