Estou executando o arquivo data.bat com as seguintes linhas:
Rem Tis batch file will populate tables
cd\program files\Microsoft SQL Server\MSSQL
osql -U sa -P Password -d MyBusiness -i c:\data.sql
O conteúdo do arquivo data.sql é:
insert Customers
(CustomerID, CompanyName, Phone)
Values('101','Southwinds','19126602729')
Existem mais 8 linhas semelhantes para adicionar registros.
Quando eu executo isso com start
> run
> cmd
> c:\data.bat
, eu recebo essa mensagem de erro:
1>2>3>4>5>....<1 row affected>
Msg 8152, Level 16, State 4, Server SP1001, Line 1
string or binary data would be truncated.
<1 row affected>
<1 row affected>
<1 row affected>
<1 row affected>
<1 row affected>
<1 row affected>
Além disso, eu sou um novato, obviamente, mas o que fazer Level #
, e state #
média, e como faço para procurar mensagens de erro como a citada acima: 8152?
fonte
Firstname nvarchar(5)
Se você inserir mais de 5 caracteres que você obterá o erroEu tive esse problema, embora o comprimento dos dados fosse menor que o comprimento do campo. O problema era ter outra tabela de log (para trilha de auditoria), preenchida por um gatilho na tabela principal, onde o tamanho da coluna também precisava ser alterado.
fonte
Em uma das
INSERT
instruções, você está tentando inserir uma sequência muito longa em uma coluna de sequência (varchar
ounvarchar
).Se não for óbvio qual
INSERT
é o ofensor apenas olhando o script, você pode contar as<1 row affected>
linhas que ocorrem antes da mensagem de erro. O número obtido mais um fornece o número do extrato. No seu caso, parece ser o segundo INSERT que produz o erro.fonte
Alguns dos seus dados não podem caber na coluna do banco de dados (pequena). Não é fácil encontrar o que está errado. Se você usa C # e Linq2Sql, pode listar o campo que seria truncado:
Primeiro crie a classe auxiliar:
Em seguida, prepare o wrapper para SubmitChanges:
Prepare o manipulador de exceção global e os detalhes de truncamento de log:
Por fim, use o código:
fonte
Só quero contribuir com informações adicionais: tive o mesmo problema e foi por causa do campo não ser grande o suficiente para os dados recebidos e esse segmento me ajudou a resolvê-lo (a resposta principal esclarece tudo).
MAS é muito importante saber quais são as possíveis razões que podem causar isso.
No meu caso, eu estava criando a tabela com um campo como este:
Portanto, o campo "Período" tinha um comprimento zero e fazia com que as operações de inserção falhassem. Alterei para "XXXXXX", que é o comprimento dos dados recebidos e agora funcionava corretamente (porque o campo agora possuía um comprimento de 6).
Espero que isso ajude alguém com o mesmo problema :)
fonte
Outra situação em que você pode obter esse erro é o seguinte:
Eu tive o mesmo erro e o motivo foi que, em uma instrução INSERT que recebeu dados de um UNION, a ordem das colunas era diferente da tabela original. Se você alterar a ordem na # tabela3 para a, b, c, você corrigirá o erro.
fonte
no servidor sql, você pode usar SET ANSI_WARNINGS OFF assim:
fonte
Eu tive o mesmo problema. O comprimento da minha coluna era muito curto.
O que você pode fazer é aumentar o tamanho ou diminuir o texto que você deseja colocar no banco de dados.
fonte
Também ocorreu esse problema na superfície do aplicativo da web. Eventualmente, descobriu que a mesma mensagem de erro vem da instrução de atualização SQL na tabela específica.
Finalmente, descobrimos que a definição da coluna nas tabelas de histórico relacionadas não mapeia o comprimento dos
nvarchar
tipos originais da coluna da tabela em alguns casos específicos.fonte
Eu tive o mesmo problema, mesmo depois de aumentar o tamanho das colunas problemáticas na tabela.
tl; dr: O comprimento das colunas correspondentes nos tipos de tabela correspondentes também pode precisar ser aumentado.
No meu caso, o erro ocorreu no serviço de exportação de dados no Microsoft Dynamics CRM, que permite que os dados do CRM sejam sincronizados com um banco de dados do SQL Server ou com o Azure SQL DB.
Após uma longa investigação, concluí que o serviço de exportação de dados deve estar usando parâmetros com valor de tabela :
Como você pode ver na documentação acima, os Tipos de tabela são usados para criar o procedimento de ingestão de dados:
Infelizmente, não há como alterar um Tipo de tabela, portanto, ele deve ser descartado e recriado inteiramente. Como minha tabela possui mais de 300 campos (😱), criei uma consulta para facilitar a criação do tipo de tabela correspondente com base na definição de colunas da tabela (basta substituir
[table_name]
pelo nome da tabela):Após atualizar o Tipo de tabela, o serviço de exportação de dados voltou a funcionar corretamente! :)
fonte
Quando tentei executar meu procedimento armazenado, tive o mesmo problema, porque o tamanho da coluna que eu preciso adicionar alguns dados é menor que os dados que eu quero adicionar.
Você pode aumentar o tamanho do tipo de dados da coluna ou reduzir o comprimento dos seus dados.
fonte
Outra situação na qual esse erro pode ocorrer está no SQL Server Management Studio. Se você tiver campos "text" ou "ntext" em sua tabela, não importa que tipo de campo você esteja atualizando (por exemplo, bit ou número inteiro). Parece que o Studio não carrega campos inteiros "ntext" e também atualiza TODOS os campos em vez do modificado. Para resolver o problema, exclua os campos "texto" ou "ntext" da consulta no Management Studio
fonte
O comentário de Kevin Pope sob a resposta aceita foi o que eu precisava.
O problema, no meu caso, era que eu tinha gatilhos definidos na minha tabela que inseriam transações de atualização / inserção em uma tabela de auditoria, mas a tabela de auditoria tinha uma incompatibilidade de tipo de dados em que uma coluna
VARCHAR(MAX)
na tabela original era armazenada comoVARCHAR(1)
na tabela tabela de auditoria, então meus gatilhos falharam quando eu inseria algo maior queVARCHAR(1)
na coluna da tabela original e recebia essa mensagem de erro.fonte
Eu usei uma tática diferente, campos que são alocados 8K em alguns lugares. Aqui apenas 50/100 são usados.
Eu queria velocidade, já que tenho 1 milhão de registros totais e carrego 28 mil deles.
fonte