У меня есть табличный параметр в SQL Server 2012, определенный как:
CREATE TYPE [dbo].[TVP] AS TABLE (
[Id] [int] NOT NULL,
[FieldName] [nvarchar](100) NOT NULL,
[Value] [sql_variant] NOT NULL
)
Я называю это в С# кодом, который выглядит примерно так:
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
.