AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 179468
Accepted
Juan Velez
Juan Velez
Asked: 2017-07-11 04:46:25 +0800 CST2017-07-11 04:46:25 +0800 CST 2017-07-11 04:46:25 +0800 CST

SQL Server Insert Into - Como identificar a coluna que está causando o erro de truncamento

  • 772

Eu tenho um procedimento armazenado que insere 650 campos em uma tabela. A inserção está falhando com um erro de truncamento.

É um simples

INSERT INTO
SELECT (a bunch of fields) 
FROM (a bunch of tables)

Abaixo está a mensagem de erro:

Msg 8152, Level 16, State 14, Procedure DSP_Procedure, Line 1075 String ou dados binários seriam truncados.

Existe uma maneira rápida de identificar qual campo está causando o erro de truncamento?

O fato de a instrução select a ser inserida na tabela ter 650 campos torna difícil identificar qual campo está causando o erro de truncamento.

Estou pensando que talvez possa comentar blocos de campos por vez para que o SP insira apenas 100 campos por vez e depois execute o SP 6 ou 7 vezes diferentes até que eu possa pelo menos restringir a um grupo de 100 campos que conterá o campo que está causando o erro de truncamento.

Alternativamente, estou pensando que talvez eu possa apenas SELECT INTOuma nova tabela e, em seguida, compare os comprimentos de dados na tabela versus os comprimentos de dados da tabela de destino que estou tentando inserir no meu SP para ver qual campo contém um comprimento de campo maior do que o esperado. ..

Estou usando o SQL Server 2014.

Alguma alternativa mais fácil?

sql-server t-sql
  • 3 3 respostas
  • 10890 Views

3 respostas

  • Voted
  1. vonPryz
    2017-07-11T05:31:55+08:002017-07-11T05:31:55+08:00

    Infelizmente, você encontrou um "recurso" bastante antigo . Há um tíquete do Connect aberto desde 2008 e, por quase dez anos, isso não foi significativo o suficiente para justificar uma correção.

    A solução alternativa padrão é, como você imaginou, select into...seguida pela comparação de metadados da tabela. Outra possibilidade é a pesquisa binária na coluna incorreta, mas isso também é um trabalho manual. Existem alguns hacks para comparação de metadados, mas uma solução simples e elegante não existe. Talvez algumas ferramentas de terceiros possam ajudar, mas não estou ciente disso.

    • 9
  2. Best Answer
    user14472
    2019-04-24T10:49:21+08:002019-04-24T10:49:21+08:00

    Se você estiver no SQL Server 2016 (SP2, CU6 ou mais recente), uma opção é ativar o sinalizador de rastreamento 460, por exemplo (QUERYTRACEON 460). A saída indicará a coluna e os dados incorretos.

    Veja este artigo para detalhes. https://www.brentozar.com/archive/2019/03/how-to-fix-the-error-string-or-binary-data-would-be-truncated/

    Se você não se importa com o truncamento, pode usar SET ANSI_WARNINGS OFFpara ignorar esse tipo de truncamento.

    • 4
  3. Taylor Brown
    2020-02-08T11:35:01+08:002020-02-08T11:35:01+08:00

    Usar (QUERYTRACEON 460) não funcionou para mim ao colocá-lo no final da minha consulta.

    Liguei no nível do banco de dados e funcionou:

    DBCC TRACEON(460, -1);
    GO
    

    Mas, certifique-se de desligá-lo depois de encontrar e corrigir o problema, não o deixe ligado!

    DBCC TRACEOFF(460, -1);
    GO
    
    • 1

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve