sql >> Base de Datos >  >> RDS >> Sqlserver

Pasar el parámetro de tipo 'objeto' en el parámetro con valores de tabla para la columna sql_variant

Esta publicación tiene muchos años, pero me encontré con el mismo problema y tengo una solución. Si no usa un DataTable sino que completa una colección de SqlDataRecord, puede establecer el tipo de datos de SqlDataRecord en SqlDbType.Variant.

 List<SqlDataRecord> dataTable = new List<SqlDataRecord>();
var dr = new SqlDataRecord(
                            new SqlMetaData("Id", SqlDbType.Int),
                            new SqlMetaData("Value", SqlDbType.Variant));

dr.SetInt32(0, id);
dr.SetValue(1, myObject);

dataTable.Add(dr);

[...]

SqlCommand sqlCommand = new SqlCommand("dbo.MyProc");
var structuredParam = sqlCommand.Parameters.Add("myTableParam", SqlDbType.Structured);
structuredParam.Value = dataTable;