Page 1 of 1

Der RPC -Protokollstrom (TDS) Remote Procedure Call (TDS) Remote Procedure Call (TDS) ist falsch

Posted: 16 Apr 2025, 08:04
by Anonymous
Es gibt viele Fragen zu diesem Fehler, aber keiner scheint verwandt zu sein. < /p>

0-tabellenWertParameter (""), Zeille 0, Spalt 0: Der 0xe7-Datentyp HAT Eine Ungültige DATEN- ODER-Metadatenlän. Es ist < /p>



Der Protokollstrom (TDS) Remote-Verfahren (TDS) Remote-Verfahren (RPC) ist falsch < /p>

0xe7-ValuedParameter ("),", " Metadatalegth. (X64)
Oct 28 2016 18:17:30
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows Server 2016 Standard 6.3 (Build 14393: ) (Hypervisor)



What is causing this:

Wir verwenden benutzerdefinierte Typen, um die Tabellen -Wert -Parameter zu übergeben. Der Fehler ist reproduzierbar, um eine DataTable mit einer einzelnen Zeile und einer Spalte zu übergeben, die eine Zeichenfolge enthält.CREATE TYPE dbo.para_table_varchar AS TABLE (value nvarchar(10) COLLATE Latin1_General_ci_ai NOT NULL);
< /code>

Der C# Code (.NET 4.6.1) < /p>

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";
< /code>

Der Befehl sieht so aus < /p>

SELECT * FROM someTable WHERE someColumn IN (SELECT value FROM @ptable)
< /code>

Dies geschieht nur in der genannten SQLServer 2016. Ungefähr 20 andere Kunden haben dieses Problem nicht. < /p>

Während Microsoft dieses Problem hier abdeckt, scheint die vorgeschlagene Arbeit (Einstellung der Größe auf -1) nicht zu funktionieren. < /p>