Miałem ten sam problem, nawet po zwiększeniu rozmiaru problematycznych kolumn w tabeli.
tl; dr: Długość pasujących kolumn w odpowiednich typach tabel może również wymagać zwiększenia.
W moim przypadku błąd pochodził z usługi eksportu danych w Microsoft Dynamics CRM, która pozwala na synchronizację danych CRM z bazą danych SQL Server lub Azure SQL DB.
Po długim dochodzeniu doszedłem do wniosku, że usługa eksportu danych musi używać parametrów wycenionych w tabeli :
Za pomocą parametrów o wartościach przechowywanych w tabeli można wysyłać wiele wierszy danych do instrukcji Transact-SQL lub procedury, takiej jak procedura składowana lub funkcja, bez tworzenia tabeli tymczasowej lub wielu parametrów.
Jak widać w powyższej dokumentacji, typy tabel są używane do tworzenia procedury przetwarzania danych:
CREATE TYPE LocationTableType AS TABLE (...);
CREATE PROCEDURE dbo.usp_InsertProductionLocation
@TVP LocationTableType READONLY
Niestety nie ma sposobu na zmianę typu tabeli, więc należy go całkowicie usunąć i odtworzyć. Ponieważ moja tabela ma ponad 300 pól (😱), utworzyłem zapytanie, aby ułatwić utworzenie odpowiedniego typu tabeli na podstawie definicji kolumn tabeli (wystarczy zastąpić [table_name]
nazwą tabeli):
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;
Po zaktualizowaniu typu tabeli usługa eksportu danych znów zaczęła działać poprawnie! :)