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 :
Você pode usar parâmetros com valor de tabela para enviar várias linhas de dados para uma instrução ou rotina do Transact-SQL, como um procedimento ou função armazenada, sem criar uma tabela temporária ou muitos parâmetros.
Como você pode ver na documentação acima, os Tipos de tabela são usados para criar o procedimento de ingestão de dados:
CREATE TYPE LocationTableType AS TABLE (...);
CREATE PROCEDURE dbo.usp_InsertProductionLocation
@TVP LocationTableType READONLY
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):
SELECT 'CREATE TYPE [table_name]Type AS TABLE (' + STRING_AGG(CAST(field AS VARCHAR(max)), ',' + CHAR(10)) + ');' AS create_type
FROM (
SELECT TOP 5000 COLUMN_NAME + ' ' + DATA_TYPE
+ IIF(CHARACTER_MAXIMUM_LENGTH IS NULL, '', CONCAT('(', IIF(CHARACTER_MAXIMUM_LENGTH = -1, 'max', CONCAT(CHARACTER_MAXIMUM_LENGTH,'')), ')'))
+ IIF(DATA_TYPE = 'decimal', CONCAT('(', NUMERIC_PRECISION, ',', NUMERIC_SCALE, ')'), '')
AS field
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '[table_name]'
ORDER BY ORDINAL_POSITION) AS T;
Após atualizar o Tipo de tabela, o serviço de exportação de dados voltou a funcionar corretamente! :)