我在 SQL Server 2012 中有一个表值参数,定义为:
CREATE TYPE [dbo].[TVP] AS TABLE (
[Id] [int] NOT NULL,
[FieldName] [nvarchar](100) NOT NULL,
[Value] [sql_variant] NOT NULL
)
我用 C# 调用它,代码大致如下所示:
var mdItems = new DataTable();
mdItems.Columns.Add("Id", typeof(int));
mdItems.Columns.Add("FieldName", typeof(string));
mdItems.Columns.Add("Value", typeof(object));
mdItems.Rows.Add(new object[] {2, "blah", "value"}); //'value' is usually a string
SqlCommand sqlCommand = conn.CreateCommand();
sqlCommand.CommandText = "[WriteFieldValues]";
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.AddWithValue("@FieldValues", mdItems);
sqlCommand.ExecuteNonQuery();
然后我在调用时从 SQL Server 收到以下错误ExecuteNonQuery
:
不支持“值”列的类型。类型是“对象”
我发现有人在 3 年前被确定为已知的 Microsoft 错误时遇到了同样的问题。但是,该错误的链接已损坏。有谁知道是否有关于错误状态或潜在解决方法的更新信息?就目前而言,这个错误确实扼杀了sql_variant
字段的价值。