关于此错误有许多问题,但似乎都不相关。
我们得到的原始异常
用于RPC协议(远程过程调用)的表格数据流(TDS)并不丰富。
0-表格重量参数(""),分子量0,分子量0:0xE7-数据类型为通用数据或元数据。
我试图翻译它
传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确
0-表值参数(""),第0行,第0列:0xE7数据类型的数据或元数据长度无效。
SqlServer的版本
Microsoft SQL Server 2016(SP1)(KB3182545)-13.0.4001.0(X64)2016年10月28日18:17:30版权所有(c)在Windows Server 2016标准版6.3(内部版本号14393:)(虚拟机管理程序)
原因是:
我们使用用户定义的类型来传递表值参数。传递一个具有单行和单列的DataTable,其中包含一个String.Empty
作为如下类型的参数时,错误是可以重现的:
CREATE TYPE dbo.para_table_varchar AS TABLE (value nvarchar(10) COLLATE Latin1_General_ci_ai NOT NULL);
C#代码(. net 4.6.1)
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)
这种情况只发生在提到的SQLServer 2016上。大约20个其他客户端没有这个问题。
虽然Microsoft在here上解决了这个问题,但建议的解决方法(将大小设置为-1)似乎不起作用。
1条答案
按热度按时间j8ag8udp1#
将变量类型从非空改为空,那么我认为您不会得到此错误