Ich hatte das gleiche Problem, auch nachdem ich die problematischen Spalten in der Tabelle vergrößert hatte.
tl; dr: Die Länge der übereinstimmenden Spalten in den entsprechenden Tabellentypen muss möglicherweise ebenfalls erhöht werden.
In meinem Fall kam der Fehler vom Datenexportdienst in Microsoft Dynamics CRM, mit dem CRM-Daten mit einer SQL Server-Datenbank oder einer Azure SQL-Datenbank synchronisiert werden können.
Nach einer langen Untersuchung kam ich zu dem Schluss, dass der Datenexportdienst tabellenwertige Parameter verwenden muss :
Sie können tabellenwertige Parameter verwenden, um mehrere Datenzeilen an eine Transact-SQL-Anweisung oder eine Routine zu senden, z. B. eine gespeicherte Prozedur oder Funktion, ohne eine temporäre Tabelle oder viele Parameter zu erstellen.
Wie Sie in der obigen Dokumentation sehen können, werden Tabellentypen verwendet, um das Datenaufnahmeverfahren zu erstellen:
CREATE TYPE LocationTableType AS TABLE (...);
CREATE PROCEDURE dbo.usp_InsertProductionLocation
@TVP LocationTableType READONLY
Leider gibt es keine Möglichkeit, einen Tabellentyp zu ändern, sodass er gelöscht und vollständig neu erstellt werden muss. Da meine Tabelle über 300 Felder (😱) enthält, habe ich eine Abfrage erstellt, um die Erstellung des entsprechenden Tabellentyps basierend auf der Spaltendefinition der Tabelle zu erleichtern (ersetzen [table_name]
Sie sie einfach durch den Namen Ihrer Tabelle):
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;
Nach dem Aktualisieren des Tabellentyps funktionierte der Datenexportdienst wieder ordnungsgemäß! :) :)