Исходное исключение, которое мы получаем
Поток табличных данных (TDS) для протокола RPC (удаленный вызов процедур) не является важным.
0-Tabellenwertparameter (""), Zeile 0, Spalte 0: Der 0xE7-Datentyp Hat eine ungültige Daten- oder Metadatenlänge.
< /blockquote>
Моя попытка перевода
Неверный поток протокола входящего потока табличных данных (TDS) удаленного вызова процедур (RPC)
0-TableValuedParameter (""), строка 0, столбец 0: тип данных 0xE7 имеет недопустимую длину данных или метаданных.
Версия SqlServer
Microsoft SQL Server 2016 (SP1) (KB3182545) — 13.0.4001.0 (X64)
28 октября 2016 г. 18:17:30
Авторские права (c) Корпорация Microsoft
Standard Edition (64-разрядная версия) в Windows Server 2016 Standard 6.3 (сборка 14393: ) (гипервизор)
Что является причиной этого:
Мы используем определяемые пользователем типы для передачи параметров с табличными значениями. Ошибка воспроизводится при передаче DataTable с одной строкой и столбцом, содержащим String.Empty в качестве параметра для типа, подобного следующему:
Код: Выделить всё
CREATE TYPE dbo.para_table_varchar AS TABLE (value nvarchar(10) COLLATE Latin1_General_ci_ai NOT NULL);
Код: Выделить всё
DataTable table = new DataTable();
DataColumn column = table.Columns.Add("value", typeof(string));
column.MaxLength = 0;
table.Rows.Add(string.Empty);
SqlParameter para = _cmd.Parameters.Add("@ptable", SqlDbType.Structured, 0);
para.Value = table;
para.TypeName ="dbo.para_table_varchar";
Код: Выделить всё
SELECT * FROM someTable WHERE someColumn IN (SELECT value FROM @ptable)
Хотя Microsoft описывает здесь эту проблему, предлагаемый обходной путь (установка размера на -1), похоже, не работает.>
Подробнее здесь: https://stackoverflow.com/questions/473 ... tocol-stre
Мобильная версия